Redis-Service.Stack.Redis对Redis基本数据类型String,List,Hash,Set,ZSet的操作

来源:互联网 发布:数据字典模型作用 编辑:程序博客网 时间:2024/05/16 09:44

一、配置文件

public sealed class RedisConfig : ConfigurationSection    {        public static RedisConfig GetConfig()        {            RedisConfig section = GetConfig("RedisConfig");            return section;        }        public static RedisConfig GetConfig(string sectionName)        {            RedisConfig section = (RedisConfig)ConfigurationManager.GetSection(sectionName);            if (section == null)                throw new ConfigurationErrorsException("Section " + sectionName + " is not found.");            return section;        }        /// <summary>        /// 可写的Redis链接地址        /// </summary>        [ConfigurationProperty("WriteServerConStr", IsRequired = false)]        public string WriteServerConStr        {            get            {                return (string)base["WriteServerConStr"];            }            set            {                base["WriteServerConStr"] = value;            }        }        /// <summary>        /// 可读的Redis链接地址        /// </summary>        [ConfigurationProperty("ReadServerConStr", IsRequired = false)]        public string ReadServerConStr        {            get            {                return (string)base["ReadServerConStr"];            }            set            {                base["ReadServerConStr"] = value;            }        }        /// <summary>        /// 最大写链接数        /// </summary>        [ConfigurationProperty("MaxWritePoolSize", IsRequired = false, DefaultValue = 5)]        public int MaxWritePoolSize        {            get            {                int _maxWritePoolSize = (int)base["MaxWritePoolSize"];                return _maxWritePoolSize > 0 ? _maxWritePoolSize : 5;            }            set            {                base["MaxWritePoolSize"] = value;            }        }        /// <summary>        /// 最大读链接数        /// </summary>        [ConfigurationProperty("MaxReadPoolSize", IsRequired = false, DefaultValue = 5)]        public int MaxReadPoolSize        {            get            {                int _maxReadPoolSize = (int)base["MaxReadPoolSize"];                return _maxReadPoolSize > 0 ? _maxReadPoolSize : 5;            }            set            {                base["MaxReadPoolSize"] = value;            }        }        /// <summary>        /// 自动重启        /// </summary>        [ConfigurationProperty("AutoStart", IsRequired = false, DefaultValue = true)]        public bool AutoStart        {            get            {                return (bool)base["AutoStart"];            }            set            {                base["AutoStart"] = value;            }        }        /// <summary>        /// 本地缓存到期时间,单位:秒        /// </summary>        [ConfigurationProperty("LocalCacheTime", IsRequired = false, DefaultValue = 36000)]        public int LocalCacheTime        {            get            {                return (int)base["LocalCacheTime"];            }            set            {                base["LocalCacheTime"] = value;            }        }        /// <summary>        /// 是否记录日志,该设置仅用于排查redis运行时出现的问题,如redis工作正常,请关闭该项        /// </summary>        [ConfigurationProperty("RecordeLog", IsRequired = false, DefaultValue = false)]        public bool RecordeLog        {            get            {                return (bool)base["RecordeLog"];            }            set            {                base["RecordeLog"] = value;            }        }    }
 <configSections>    <section name="RedisConfig" type="RedisDemo.RedisConfig,RedisDemo" />  </configSections>  <RedisConfig WriteServerConStr="10.190.148.106:6379" ReadServerConStr="10.172.41.187:6379" MaxWritePoolSize="500" MaxReadPoolSize="300">   </RedisConfig>

二、配置Redis连接

public class RedisManager    {        /// <summary>        /// redis配置文件信息        /// </summary>        private static RedisConfig RedisConfig = RedisConfig.GetConfig();        private static PooledRedisClientManager prcm;        /// <summary>        /// 静态构造方法,初始化链接池管理对象        /// </summary>        static RedisManager()        {            CreateManager();        }        /// <summary>        /// 创建链接池管理对象        /// </summary>        private static void CreateManager()        {            string[] WriteServerConStr = SplitString(RedisConfig.WriteServerConStr, ",");            string[] ReadServerConStr = SplitString(RedisConfig.ReadServerConStr, ",");            prcm = new PooledRedisClientManager(ReadServerConStr, WriteServerConStr,                             new RedisClientManagerConfig                             {                                 MaxWritePoolSize = RedisConfig.MaxWritePoolSize,                                 MaxReadPoolSize = RedisConfig.MaxReadPoolSize,                                 AutoStart = RedisConfig.AutoStart,                             });        }        private static string[] SplitString(string strSource, string split)        {            return strSource.Split(split.ToArray());        }        /// <summary>        /// 客户端缓存操作对象        /// </summary>        public static IRedisClient GetClient()        {            if (prcm == null)                CreateManager();            return prcm.GetClient();        }    }

三、封装RedisClient

    /// <summary>    /// RedisBase类,是redis操作的基类,继承自IDisposable接口,主要用于释放内存    /// </summary>    public abstract class RedisBase : IDisposable    {        public static IRedisClient Core { get; private set; }        private bool _disposed = false;        static RedisBase()        {            Core = RedisManager.GetClient();        }        protected virtual void Dispose(bool disposing)        {            if (!this._disposed)            {                if (disposing)                {                    Core.Dispose();                    Core = null;                }            }            this._disposed = true;        }        public void Dispose()        {            Dispose(true);            GC.SuppressFinalize(this);        }        /// <summary>        /// 保存数据DB文件到硬盘        /// </summary>        public void Save()        {            Core.Save();        }        /// <summary>        /// 异步保存数据DB文件到硬盘        /// </summary>        public void SaveAsync()        {            Core.SaveAsync();        }    }

四、DoRedisBase类

包含对各种数据类型的所有操作
 public class DoRedisBase    {        public static DoRedisBase Core { get; private set; }        static DoRedisBase() {            Core = new RedisDemo.DoRedisBase();        }        public void FlushAll()        {            RedisBase.Core.FlushAll();        }        public void PushItemToList(string key, string value)        {            RedisBase.Core.PushItemToList(key,value);        }        public void AddItemToList(string key, string value)        {            RedisBase.Core.AddItemToList(key,value);        }        public void PrependItemToList(string key, string value)        {            RedisBase.Core.PrependItemToList(key,value);        }        public void AddRangeToList(string key, List<string> values)        {            RedisBase.Core.AddRangeToList(key,values);        }        public string BlockingPopItemFromList(string key, TimeSpan? sp)        {            return RedisBase.Core.BlockingPopItemFromList(key,sp);        }        //.....其他方法    }

五、操作String

public class DoRedisString : DoRedisBase    {        #region 赋值        /// <summary>        /// 设置key的value        /// </summary>        public bool Set(string key, string value)        {            return RedisBase.Core.Set<string>(key, value);        }        /// <summary>        /// 设置key的value并设置过期时间        /// </summary>        public bool Set(string key, string value, DateTime dt)        {            return RedisBase.Core.Set<string>(key, value, dt);        }        /// <summary>        /// 设置key的value并设置过期时间        /// </summary>        public bool Set(string key, string value, TimeSpan sp)        {            return RedisBase.Core.Set<string>(key, value, sp);        }        /// <summary>        /// 设置多个key/value        /// </summary>        public void Set(Dictionary<string, string> dic)        {            RedisBase.Core.SetAll(dic);        }        #endregion        #region 追加        /// <summary>        /// 在原有key的value值之后追加value        /// </summary>        public long Append(string key, string value)        {            return RedisBase.Core.AppendToValue(key, value);        }        #endregion        #region 获取值        /// <summary>        /// 获取key的value值        /// </summary>        public string Get(string key)        {            return RedisBase.Core.GetValue(key);        }        /// <summary>        /// 获取多个key的value值        /// </summary>        public List<string> Get(List<string> keys)        {            return RedisBase.Core.GetValues(keys);        }        /// <summary>        /// 获取多个key的value值        /// </summary>        public List<T> Get<T>(List<string> keys)        {            return RedisBase.Core.GetValues<T>(keys);        }        #endregion        #region 获取旧值赋上新值        /// <summary>        /// 获取旧值赋上新值        /// </summary>        public string GetAndSetValue(string key, string value)        {            return RedisBase.Core.GetAndSetValue(key, value);        }        #endregion        #region 辅助方法        /// <summary>        /// 获取值的长度        /// </summary>        public long GetCount(string key)        {            return RedisBase.Core.GetStringCount(key);        }        /// <summary>        /// 自增1,返回自增后的值        /// </summary>        public long Incr(string key)        {            return RedisBase.Core.IncrementValue(key);        }        /// <summary>        /// 自增count,返回自增后的值        /// </summary>        public double IncrBy(string key, double count)        {            return RedisBase.Core.IncrementValueBy(key, count);        }        /// <summary>        /// 自减1,返回自减后的值        /// </summary>        public long Decr(string key)        {            return RedisBase.Core.DecrementValue(key);        }        /// <summary>        /// 自减count ,返回自减后的值        /// </summary>        /// <param name="key"></param>        /// <param name="count"></param>        /// <returns></returns>        public long DecrBy(string key, int count)        {            return RedisBase.Core.DecrementValueBy(key, count);        }        #endregion    }

六、操作List

 public class DoRedisList : DoRedisBase    {        #region 赋值        /// <summary>        /// 从左侧向list中添加值        /// </summary>        public void LPush(string key, string value)        {            RedisBase.Core.PushItemToList(key, value);        }        /// <summary>        /// 从左侧向list中添加值,并设置过期时间        /// </summary>        public void LPush(string key, string value, DateTime dt)        {            RedisBase.Core.PushItemToList(key, value);            RedisBase.Core.ExpireEntryAt(key, dt);        }        /// <summary>        /// 从左侧向list中添加值,设置过期时间        /// </summary>        public void LPush(string key, string value, TimeSpan span)        {            RedisBase.Core.PushItemToList(key, value);            RedisBase.Core.ExpireEntryIn(key, span);        }        /// <summary>        /// 从右侧向list中添加值        /// </summary>        public void RPush(string key, string value)        {            RedisBase.Core.PrependItemToList(key, value);        }        /// <summary>        /// 从右侧向list中添加值,并设置过期时间        /// </summary>            public void RPush(string key, string value, DateTime dt)        {            RedisBase.Core.PrependItemToList(key, value);            RedisBase.Core.ExpireEntryAt(key, dt);        }        /// <summary>        /// 从右侧向list中添加值,并设置过期时间        /// </summary>                public void RPush(string key, string value, TimeSpan sp)        {            RedisBase.Core.PrependItemToList(key, value);            RedisBase.Core.ExpireEntryIn(key, sp);        }        /// <summary>        /// 添加key/value        /// </summary>          public void Add(string key, string value)        {            RedisBase.Core.AddItemToList(key,value);        }        /// <summary>        /// 添加key/value ,并设置过期时间        /// </summary>          public void Add(string key, string value, DateTime dt)        {            RedisBase.Core.AddItemToList(key, value);            RedisBase.Core.ExpireEntryAt(key, dt);        }        /// <summary>        /// 添加key/value。并添加过期时间        /// </summary>          public void Add(string key, string value, TimeSpan sp)        {            RedisBase.Core.AddItemToList(key, value);            RedisBase.Core.ExpireEntryIn(key, sp);        }        /// <summary>        /// 为key添加多个值        /// </summary>          public void Add(string key, List<string> values)        {            RedisBase.Core.AddRangeToList(key,values);        }        /// <summary>        /// 为key添加多个值,并设置过期时间        /// </summary>          public void Add(string key, List<string> values, DateTime dt)        {            RedisBase.Core.AddRangeToList(key, values);            RedisBase.Core.ExpireEntryAt(key, dt);        }        /// <summary>        /// 为key添加多个值,并设置过期时间        /// </summary>          public void Add(string key, List<string> values, TimeSpan sp)        {            RedisBase.Core.AddRangeToList(key, values);            RedisBase.Core.ExpireEntryIn(key, sp);        }        #endregion        #region 获取值        /// <summary>        /// 获取list中key包含的数据数量        /// </summary>          public long Count(string key)        {            return RedisBase.Core.GetListCount(key);        }        /// <summary>        /// 获取key包含的所有数据集合        /// </summary>          public List<string> Get(string key)        {            return RedisBase.Core.GetAllItemsFromList(key);        }        /// <summary>        /// 获取key中下标为start到end的值集合        /// </summary>          public List<string> Get(string key, int start, int end)        {            return RedisBase.Core.GetRangeFromList(key,start,end);        }        #endregion        #region 阻塞命令        /// <summary>        ///  阻塞命令:从list中keys的尾部移除一个值,并返回移除的值,阻塞时间为sp        /// </summary>          public string BlockingPopItemFromList(string key, TimeSpan? sp)        {            return RedisBase.Core.BlockingPopItemFromList(key,sp);        }        /// <summary>        ///  阻塞命令:从list中keys的尾部移除一个值,并返回移除的值,阻塞时间为sp        /// </summary>          public ItemRef BlockingPopItemFromLists(string[] keys, TimeSpan? sp)        {            return RedisBase.Core.BlockingDequeueItemFromLists(keys,sp);        }        /// <summary>        ///  阻塞命令:从list中keys的尾部移除一个值,并返回移除的值,阻塞时间为sp        /// </summary>          public string BlockingDequeueItemFromList(string key, TimeSpan? sp)        {            return RedisBase.Core.BlockingDequeueItemFromList(key,sp);        }        /// <summary>        /// 阻塞命令:从list中keys的尾部移除一个值,并返回移除的值,阻塞时间为sp        /// </summary>          public ItemRef BlockingDequeueItemFromLists(string[] keys, TimeSpan? sp)        {            return RedisBase.Core.BlockingDequeueItemFromLists(keys,sp);        }        /// <summary>        /// 阻塞命令:从list中key的头部移除一个值,并返回移除的值,阻塞时间为sp        /// </summary>          public string BlockingRemoveStartFromList(string keys, TimeSpan? sp)        {            return RedisBase.Core.BlockingRemoveStartFromList(keys,sp);        }        /// <summary>        /// 阻塞命令:从list中key的头部移除一个值,并返回移除的值,阻塞时间为sp        /// </summary>          public ItemRef BlockingRemoveStartFromLists(string[] keys, TimeSpan? sp)        {            return RedisBase.Core.BlockingRemoveStartFromLists(keys, sp);        }        /// <summary>        /// 阻塞命令:从list中一个fromkey的尾部移除一个值,添加到另外一个tokey的头部,并返回移除的值,阻塞时间为sp        /// </summary>          public string BlockingPopAndPushItemBetweenLists(string fromkey, string tokey, TimeSpan? sp)        {            return RedisBase.Core.BlockingPopAndPushItemBetweenLists(fromkey,tokey,sp);        }        #endregion        #region 删除        /// <summary>        /// 从尾部移除数据,返回移除的数据        /// </summary>          public string PopItemFromList(string key)        {            return RedisBase.Core.PopItemFromList(key);        }        /// <summary>        /// 移除list中,key/value,与参数相同的值,并返回移除的数量        /// </summary>          public long RemoveItemFromList(string key, string value)        {            return RedisBase.Core.RemoveItemFromList(key,value);        }        /// <summary>        /// 从list的尾部移除一个数据,返回移除的数据        /// </summary>         public string RemoveEndFromList(string key)        {            return RedisBase.Core.RemoveEndFromList(key);        }        /// <summary>        /// 从list的头部移除一个数据,返回移除的值        /// </summary>          public string RemoveStartFromList(string key)        {            return RedisBase.Core.RemoveStartFromList(key);        }        #endregion        #region 其他        /// <summary>        /// 从一个list的尾部移除一个数据,添加到另外一个list的头部,并返回移动的值        /// </summary>          public string PopAndPushItemBetweenLists(string fromkey, string tokey)        {            return RedisBase.Core.PopAndPushItemBetweenLists(fromkey,tokey);        }        #endregion 

展现List的阻塞功能,类似一个简单的消息队列功能
static void Main(string[] args)        {            string key = "zlh";            //清空数据库            DoRedisBase.Core.FlushAll();            //给list赋值            DoRedisBase.Core.PushItemToList(key, "1");            DoRedisBase.Core.PushItemToList(key, "2");            DoRedisBase.Core.AddItemToList(key, "3");            DoRedisBase.Core.PrependItemToList(key, "0");            DoRedisBase.Core.AddRangeToList(key, new List<string>() { "4", "5", "6" });            #region 阻塞            //启用一个线程来处理阻塞的数据集合            new Thread(new ThreadStart(RunBlock)).Start();            #endregion            Console.ReadKey();        }        public static void RunBlock()        {            while (true)            {                              //如果key为zlh的list集合中有数据,则读出,如果没有则等待2个小时,2个小时中只要有数据进入这里就可以给打印出来,类似一个简易的消息队列功能。               Console.WriteLine(DoRedisBase.Core.BlockingPopItemFromList("zlh", TimeSpan.FromHours(2)));            }        }

七、操作Set

public class DoRedisSet:DoRedisBase    {        #region 添加        /// <summary>        /// key集合中添加value值        /// </summary>        public void Add(string key, string value)        {            RedisBase.Core.AddItemToSet(key,value);        }        /// <summary>        /// key集合中添加list集合        /// </summary>        public void Add(string key, List<string> list)        {            RedisBase.Core.AddRangeToSet(key, list);        }        #endregion        #region 获取        /// <summary>        /// 随机获取key集合中的一个值        /// </summary>        public string GetRandomItemFromSet(string key)        {           return RedisBase.Core.GetRandomItemFromSet(key);        }        /// <summary>        /// 获取key集合值的数量        /// </summary>        public long GetCount(string key)        {            return RedisBase.Core.GetSetCount(key);        }        /// <summary>        /// 获取所有key集合的值        /// </summary>        public HashSet<string> GetAllItemsFromSet(string key)        {            return RedisBase.Core.GetAllItemsFromSet(key);        }        #endregion        #region 删除        /// <summary>        /// 随机删除key集合中的一个值        /// </summary>        public string PopItemFromSet(string key)        {            return RedisBase.Core.PopItemFromSet(key);        }        /// <summary>        /// 删除key集合中的value        /// </summary>        public void RemoveItemFromSet(string key, string value)        {            RedisBase.Core.RemoveItemFromSet(key,value);        }        #endregion        #region 其它        /// <summary>        /// 从fromkey集合中移除值为value的值,并把value添加到tokey集合中        /// </summary>        public void MoveBetweenSets(string fromkey,string tokey,string value)        {             RedisBase.Core.MoveBetweenSets(fromkey,tokey,value);        }        /// <summary>        /// 返回keys多个集合中的并集,返还hashset        /// </summary>        public HashSet<string> GetUnionFromSets(string[] keys)        {           return RedisBase.Core.GetUnionFromSets(keys);        }        /// <summary>        /// keys多个集合中的并集,放入newkey集合中        /// </summary>        public void StoreUnionFromSets(string newkey, string[] keys)        {             RedisBase.Core.StoreUnionFromSets(newkey,keys);        }        /// <summary>        /// 把fromkey集合中的数据与keys集合中的数据对比,fromkey集合中不存在keys集合中,则把这些不存在的数据放入newkey集合中        /// </summary>        public void StoreDifferencesFromSet(string newkey, string fromkey, string[] keys)        {            RedisBase.Core.StoreDifferencesFromSet(newkey,fromkey,keys);        }        #endregion    }

八、操作ZSet

public class DoRedisZSet : DoRedisBase    {        #region 添加        /// <summary>        /// 添加key/value,默认分数是从1.多*10的9次方以此递增的,自带自增效果        /// </summary>        public bool AddItemToSortedSet(string key, string value)        {           return RedisBase.Core.AddItemToSortedSet(key, value);        }        /// <summary>        /// 添加key/value,并设置value的分数        /// </summary>        public bool AddItemToSortedSet(string key, string value, double score)        {            return RedisBase.Core.AddItemToSortedSet(key, value, score);        }        /// <summary>        /// 为key添加values集合,values集合中每个value的分数设置为score        /// </summary>        public bool AddRangeToSortedSet(string key,List<string> values,double score)        {            return RedisBase.Core.AddRangeToSortedSet(key, values, score);        }        /// <summary>        /// 为key添加values集合,values集合中每个value的分数设置为score        /// </summary>        public bool AddRangeToSortedSet(string key, List<string> values, long score)        {            return RedisBase.Core.AddRangeToSortedSet(key, values, score);        }        #endregion        #region 获取        /// <summary>        /// 获取key的所有集合        /// </summary>        public List<string> GetAllItemsFromSortedSet(string key)        {            return RedisBase.Core.GetAllItemsFromSortedSet(key);        }        /// <summary>        /// 获取key的所有集合,倒叙输出        /// </summary>        public List<string> GetAllItemsFromSortedSetDesc(string key)        {            return RedisBase.Core.GetAllItemsFromSortedSetDesc(key);        }        /// <summary>        /// 获取可以的说有集合,带分数        /// </summary>        public IDictionary<string, double> GetAllWithScoresFromSortedSet(string key)        {            return RedisBase.Core.GetAllWithScoresFromSortedSet(key);        }        /// <summary>        /// 获取key为value的下标值        /// </summary>        public long GetItemIndexInSortedSet(string key, string value)        {            return RedisBase.Core.GetItemIndexInSortedSet(key, value);        }        /// <summary>        /// 倒叙排列获取key为value的下标值        /// </summary>        public long GetItemIndexInSortedSetDesc(string key, string value)        {            return RedisBase.Core.GetItemIndexInSortedSetDesc(key, value);        }        /// <summary>        /// 获取key为value的分数        /// </summary>        public double GetItemScoreInSortedSet(string key,string value)        {            return RedisBase.Core.GetItemScoreInSortedSet(key,value);        }        /// <summary>        /// 获取key所有集合的数据总数        /// </summary>        public long GetSortedSetCount(string key)        {            return RedisBase.Core.GetSortedSetCount(key);        }        /// <summary>        /// key集合数据从分数为fromscore到分数为toscore的数据总数        /// </summary>        public long GetSortedSetCount(string key,double fromScore,double toScore)        {            return RedisBase.Core.GetSortedSetCount(key,fromScore,toScore);        }        /// <summary>        /// 获取key集合从高分到低分排序数据,分数从fromscore到分数为toscore的数据        /// </summary>        public List<string> GetRangeFromSortedSetByHighestScore(string key, double fromscore, double toscore)        {            return RedisBase.Core.GetRangeFromSortedSetByHighestScore(key, fromscore, toscore);        }        /// <summary>        /// 获取key集合从低分到高分排序数据,分数从fromscore到分数为toscore的数据        /// </summary>        public List<string> GetRangeFromSortedSetByLowestScore(string key, double fromscore, double toscore)        {            return RedisBase.Core.GetRangeFromSortedSetByLowestScore(key, fromscore, toscore);        }        /// <summary>        /// 获取key集合从高分到低分排序数据,分数从fromscore到分数为toscore的数据,带分数        /// </summary>        public IDictionary<string, double> GetRangeWithScoresFromSortedSetByHighestScore(string key, double fromscore, double toscore)        {            return RedisBase.Core.GetRangeWithScoresFromSortedSetByHighestScore(key, fromscore, toscore);        }        /// <summary>        ///  获取key集合从低分到高分排序数据,分数从fromscore到分数为toscore的数据,带分数        /// </summary>        public IDictionary<string, double> GetRangeWithScoresFromSortedSetByLowestScore(string key, double fromscore, double toscore)        {            return RedisBase.Core.GetRangeWithScoresFromSortedSetByLowestScore(key, fromscore, toscore);        }        /// <summary>        ///  获取key集合数据,下标从fromRank到分数为toRank的数据        /// </summary>        public List<string> GetRangeFromSortedSet(string key, int fromRank, int toRank)        {            return RedisBase.Core.GetRangeFromSortedSet(key, fromRank, toRank);        }        /// <summary>        /// 获取key集合倒叙排列数据,下标从fromRank到分数为toRank的数据        /// </summary>        public List<string> GetRangeFromSortedSetDesc(string key, int fromRank, int toRank)        {            return RedisBase.Core.GetRangeFromSortedSetDesc(key, fromRank, toRank);        }        /// <summary>        /// 获取key集合数据,下标从fromRank到分数为toRank的数据,带分数        /// </summary>        public IDictionary<string, double> GetRangeWithScoresFromSortedSet(string key, int fromRank, int toRank)        {            return RedisBase.Core.GetRangeWithScoresFromSortedSet(key, fromRank, toRank);        }        /// <summary>        ///  获取key集合倒叙排列数据,下标从fromRank到分数为toRank的数据,带分数        /// </summary>        public IDictionary<string, double> GetRangeWithScoresFromSortedSetDesc(string key, int fromRank, int toRank)        {            return RedisBase.Core.GetRangeWithScoresFromSortedSetDesc(key, fromRank, toRank);        }        #endregion        #region 删除        /// <summary>        /// 删除key为value的数据        /// </summary>        public bool RemoveItemFromSortedSet(string key,string value)        {            return RedisBase.Core.RemoveItemFromSortedSet(key, value);        }        /// <summary>        /// 删除下标从minRank到maxRank的key集合数据        /// </summary>        public long RemoveRangeFromSortedSet(string key,int minRank,int maxRank)        {            return RedisBase.Core.RemoveRangeFromSortedSet(key,minRank,maxRank);        }        /// <summary>        /// 删除分数从fromscore到toscore的key集合数据        /// </summary>        public long RemoveRangeFromSortedSetByScore(string key, double fromscore, double toscore)        {            return RedisBase.Core.RemoveRangeFromSortedSetByScore(key, fromscore, toscore);        }        /// <summary>        /// 删除key集合中分数最大的数据        /// </summary>        public string PopItemWithHighestScoreFromSortedSet(string key)        {            return RedisBase.Core.PopItemWithHighestScoreFromSortedSet(key);        }        /// <summary>        /// 删除key集合中分数最小的数据        /// </summary>        public string PopItemWithLowestScoreFromSortedSet(string key)        {            return RedisBase.Core.PopItemWithLowestScoreFromSortedSet(key);        }        #endregion        #region 其它        /// <summary>        /// 判断key集合中是否存在value数据        /// </summary>        public bool SortedSetContainsItem(string key, string value)        {            return RedisBase.Core.SortedSetContainsItem(key,value);        }        /// <summary>        /// 为key集合值为value的数据,分数加scoreby,返回相加后的分数        /// </summary>        public double IncrementItemInSortedSet(string key,string value,double scoreBy)        {            return RedisBase.Core.IncrementItemInSortedSet(key,value,scoreBy);        }        /// <summary>        /// 获取keys多个集合的交集,并把交集添加的newkey集合中,返回交集数据的总数        /// </summary>        public long StoreIntersectFromSortedSets(string newkey, string[] keys)        {            return RedisBase.Core.StoreIntersectFromSortedSets(newkey,keys);        }        /// <summary>        /// 获取keys多个集合的并集,并把并集数据添加到newkey集合中,返回并集数据的总数        /// </summary>        public long StoreUnionFromSortedSets(string newkey, string[] keys)        {            return RedisBase.Core.StoreUnionFromSortedSets(newkey, keys);        }        #endregion    }

九、操作Hash

public class DoRedisHash :DoRedisBase    {        #region 添加        /// <summary>        /// 向hashid集合中添加key/value        /// </summary>               public bool SetEntryInHash(string hashid, string key, string value)        {            return RedisBase.Core.SetEntryInHash(hashid,key,value);        }        /// <summary>        /// 如果hashid集合中存在key/value则不添加返回false,如果不存在在添加key/value,返回true        /// </summary>        public bool SetEntryInHashIfNotExists(string hashid, string key, string value)        {            return RedisBase.Core.SetEntryInHashIfNotExists(hashid, key, value);        }        /// <summary>        /// 存储对象T t到hash集合中        /// </summary>        public void StoreAsHash<T>(T t)        {            RedisBase.Core.StoreAsHash<T>(t);        }        #endregion        #region 获取        /// <summary>        /// 获取对象T中ID为id的数据。        /// </summary>        public T GetFromHash<T>(object id)        {            return RedisBase.Core.GetFromHash<T>(id);        }        /// <summary>        /// 获取所有hashid数据集的key/value数据集合        /// </summary>        public Dictionary<string, string> GetAllEntriesFromHash(string hashid)        {            return RedisBase.Core.GetAllEntriesFromHash(hashid);        }        /// <summary>        /// 获取hashid数据集中的数据总数        /// </summary>        public long GetHashCount(string hashid)        {            return RedisBase.Core.GetHashCount(hashid);        }        /// <summary>        /// 获取hashid数据集中所有key的集合        /// </summary>        public List<string> GetHashKeys(string hashid)        {            return RedisBase.Core.GetHashKeys(hashid);        }        /// <summary>        /// 获取hashid数据集中的所有value集合        /// </summary>        public List<string> GetHashValues(string hashid)        {            return RedisBase.Core.GetHashValues(hashid);        }        /// <summary>        /// 获取hashid数据集中,key的value数据        /// </summary>        public string GetValueFromHash(string hashid, string key)        {            return RedisBase.Core.GetValueFromHash(hashid, key);        }        /// <summary>        /// 获取hashid数据集中,多个keys的value集合        /// </summary>        public List<string> GetValuesFromHash(string hashid, string[] keys)        {            return RedisBase.Core.GetValuesFromHash(hashid, keys);        }        #endregion        #region 删除        #endregion        /// <summary>        /// 删除hashid数据集中的key数据        /// </summary>        public bool RemoveEntryFromHash(string hashid, string key)        {            return RedisBase.Core.RemoveEntryFromHash(hashid, key);        }             #region 其它        /// <summary>        /// 判断hashid数据集中是否存在key的数据        /// </summary>        public bool HashContainsEntry(string hashid, string key)        {            return RedisBase.Core.HashContainsEntry(hashid,key);        }        /// <summary>        /// 给hashid数据集key的value加countby,返回相加后的数据        /// </summary>        public double IncrementValueInHash(string hashid, string key, double countBy)        {            return RedisBase.Core.IncrementValueInHash(hashid, key, countBy);        }        #endregion    }

十、Redis中的事务与锁

static void Main(string[] args)        {            //清空数据库            DoRedisBase.Core.FlushAll();            //声明事务            using (var tran = RedisManager.GetClient().CreateTransaction())            {                try                {                    tran.QueueCommand(p =>                    {                        //操作redis数据命令                        DoRedisBase.Core.Set<int>("name", 30);                        long i = DoRedisBase.Core.IncrementValueBy("name", 1);                    });                    //提交事务                    tran.Commit();                }                catch                {                    //回滚事务                    tran.Rollback();                }                ////操作redis数据命令                //RedisManager.GetClient().Set<int>("zlh", 30);                ////声明锁,网页程序可获得锁效果                //using (RedisManager.GetClient().AcquireLock("zlh"))                //{                //    RedisManager.GetClient().Set<int>("zlh", 31);                //    Thread.Sleep(10000);                //}            }            Console.ReadKey();        }

阅读全文
0 0
原创粉丝点击