Net使用Redis详解之ServiceStack.Redis(七)

序言

本篇从.Net如何接入Reis开始,直至.Net对Redis的各种操作,为了方便学习与做为文档的查看,我做一遍注释展现,其中会对list的阻塞功能和事务的运用做二个案例,进行记录学习。

Redis官方推荐的.NET驱动类库为Service.Stack.Redis。然而网上对这个类库的中文文档不是很全面与合理,这篇文章主要就对这个类库做注释展现。不足遗漏之处还望见谅,海涵。

.Net使用Redis是非常方便与快捷与简单的,下面就让我展示下吧。

这里有必要说一下,如果你对Redis 中的基本对象数据类型还不了解,建议你看下我的前几篇Redis文章,保证要到病除。点击:我的Redis系列文章

项目中安装下载Service.Stack.Redis类库

右击项目->管理NuGet程序包->在联机中输入Reis就能出现这个类库,然后添加引入就行啦。

.Net链接Redis数据库,支持读写分离

1、配置文件

  1. public sealed class RedisConfig : ConfigurationSection
  2. {
  3. public static RedisConfig GetConfig()
  4. {
  5. RedisConfig section = GetConfig("RedisConfig");
  6. return section;
  7. }
  8.  
  9. public static RedisConfig GetConfig(string sectionName)
  10. {
  11. RedisConfig section = (RedisConfig)ConfigurationManager.GetSection(sectionName);
  12. if (section == null)
  13. throw new ConfigurationErrorsException("Section " + sectionName + " is not found.");
  14. return section;
  15. }
  16. /// <summary>
  17. /// 可写的Redis链接地址
  18. /// </summary>
  19. [ConfigurationProperty("WriteServerConStr", IsRequired = false)]
  20. public string WriteServerConStr
  21. {
  22. get
  23. {
  24. return (string)base["WriteServerConStr"];
  25. }
  26. set
  27. {
  28. base["WriteServerConStr"] = value;
  29. }
  30. }
  31.  
  32. /// <summary>
  33. /// 可读的Redis链接地址
  34. /// </summary>
  35. [ConfigurationProperty("ReadServerConStr", IsRequired = false)]
  36. public string ReadServerConStr
  37. {
  38. get
  39. {
  40. return (string)base["ReadServerConStr"];
  41. }
  42. set
  43. {
  44. base["ReadServerConStr"] = value;
  45. }
  46. }
  47. /// <summary>
  48. /// 最大写链接数
  49. /// </summary>
  50. [ConfigurationProperty("MaxWritePoolSize", IsRequired = false, DefaultValue = 5)]
  51. public int MaxWritePoolSize
  52. {
  53. get
  54. {
  55. int _maxWritePoolSize = (int)base["MaxWritePoolSize"];
  56. return _maxWritePoolSize > 0 ? _maxWritePoolSize : 5;
  57. }
  58. set
  59. {
  60. base["MaxWritePoolSize"] = value;
  61. }
  62. }
  63.  
  64. /// <summary>
  65. /// 最大读链接数
  66. /// </summary>
  67. [ConfigurationProperty("MaxReadPoolSize", IsRequired = false, DefaultValue = 5)]
  68. public int MaxReadPoolSize
  69. {
  70. get
  71. {
  72. int _maxReadPoolSize = (int)base["MaxReadPoolSize"];
  73. return _maxReadPoolSize > 0 ? _maxReadPoolSize : 5;
  74. }
  75. set
  76. {
  77. base["MaxReadPoolSize"] = value;
  78. }
  79. }
  80.  
  81. /// <summary>
  82. /// 自动重启
  83. /// </summary>
  84. [ConfigurationProperty("AutoStart", IsRequired = false, DefaultValue = true)]
  85. public bool AutoStart
  86. {
  87. get
  88. {
  89. return (bool)base["AutoStart"];
  90. }
  91. set
  92. {
  93. base["AutoStart"] = value;
  94. }
  95. }
  96.  
  97. /// <summary>
  98. /// 本地缓存到期时间,单位:秒
  99. /// </summary>
  100. [ConfigurationProperty("LocalCacheTime", IsRequired = false, DefaultValue = 36000)]
  101. public int LocalCacheTime
  102. {
  103. get
  104. {
  105. return (int)base["LocalCacheTime"];
  106. }
  107. set
  108. {
  109. base["LocalCacheTime"] = value;
  110. }
  111. }
  112.  
  113. /// <summary>
  114. /// 是否记录日志,该设置仅用于排查redis运行时出现的问题,如redis工作正常,请关闭该项
  115. /// </summary>
  116. [ConfigurationProperty("RecordeLog", IsRequired = false, DefaultValue = false)]
  117. public bool RecordeLog
  118. {
  119. get
  120. {
  121. return (bool)base["RecordeLog"];
  122. }
  123. set
  124. {
  125. base["RecordeLog"] = value;
  126. }
  127. }
  128.  
  129. }

2、配置Redis链接

  1. public class RedisManager
  2. {
  3. /// <summary>
  4. /// redis配置文件信息
  5. /// </summary>
  6. private static RedisConfig RedisConfig = RedisConfig.GetConfig();
  7.  
  8. private static PooledRedisClientManager prcm;
  9.  
  10. /// <summary>
  11. /// 静态构造方法,初始化链接池管理对象
  12. /// </summary>
  13. static RedisManager()
  14. {
  15. CreateManager();
  16. }
  17.  
  18. /// <summary>
  19. /// 创建链接池管理对象
  20. /// </summary>
  21. private static void CreateManager()
  22. {
  23. string[] WriteServerConStr = SplitString(RedisConfig.WriteServerConStr, ",");
  24. string[] ReadServerConStr = SplitString(RedisConfig.ReadServerConStr, ",");
  25. prcm = new PooledRedisClientManager(ReadServerConStr, WriteServerConStr,
  26. new RedisClientManagerConfig
  27. {
  28. MaxWritePoolSize = RedisConfig.MaxWritePoolSize,
  29. MaxReadPoolSize = RedisConfig.MaxReadPoolSize,
  30. AutoStart = RedisConfig.AutoStart,
  31. });
  32. }
  33.  
  34. private static string[] SplitString(string strSource, string split)
  35. {
  36. return strSource.Split(split.ToArray());
  37. }
  38. /// <summary>
  39. /// 客户端缓存操作对象
  40. /// </summary>
  41. public static IRedisClient GetClient()
  42. {
  43. if (prcm == null)
  44. CreateManager();
  45. return prcm.GetClient();
  46. }
  47. }

3、IRedisClient为操作Redis的接口,是.Net操作Redis的主要类库,这里我们把它接入

  1. /// <summary>
  2. /// RedisBase类,是redis操作的基类,继承自IDisposable接口,主要用于释放内存
  3. /// </summary>
  4. public abstract class RedisBase : IDisposable
  5. {
  6. public static IRedisClient Core { get; private set; }
  7. private bool _disposed = false;
  8. static RedisBase()
  9. {
  10. Core = RedisManager.GetClient();
  11. }
  12. protected virtual void Dispose(bool disposing)
  13. {
  14. if (!this._disposed)
  15. {
  16. if (disposing)
  17. {
  18. Core.Dispose();
  19. Core = null;
  20. }
  21. }
  22. this._disposed = true;
  23. }
  24. public void Dispose()
  25. {
  26. Dispose(true);
  27. GC.SuppressFinalize(this);
  28. }
  29. /// <summary>
  30. /// 保存数据DB文件到硬盘
  31. /// </summary>
  32. public void Save()
  33. {
  34. Core.Save();
  35. }
  36. /// <summary>
  37. /// 异步保存数据DB文件到硬盘
  38. /// </summary>
  39. public void SaveAsync()
  40. {
  41. Core.SaveAsync();
  42. }
  43. }

.Net操作Redis数据类型String

  1. public class DoRedisString : DoRedisBase
  2. {
  3. #region 赋值
  4. /// <summary>
  5. /// 设置key的value
  6. /// </summary>
  7. public bool Set(string key, string value)
  8. {
  9. return RedisBase.Core.Set<string>(key, value);
  10. }
  11. /// <summary>
  12. /// 设置key的value并设置过期时间
  13. /// </summary>
  14. public bool Set(string key, string value, DateTime dt)
  15. {
  16. return RedisBase.Core.Set<string>(key, value, dt);
  17. }
  18. /// <summary>
  19. /// 设置key的value并设置过期时间
  20. /// </summary>
  21. public bool Set(string key, string value, TimeSpan sp)
  22. {
  23. return RedisBase.Core.Set<string>(key, value, sp);
  24. }
  25. /// <summary>
  26. /// 设置多个key/value
  27. /// </summary>
  28. public void Set(Dictionary<string, string> dic)
  29. {
  30. RedisBase.Core.SetAll(dic);
  31. }
  32.  
  33. #endregion
  34. #region 追加
  35. /// <summary>
  36. /// 在原有key的value值之后追加value
  37. /// </summary>
  38. public long Append(string key, string value)
  39. {
  40. return RedisBase.Core.AppendToValue(key, value);
  41. }
  42. #endregion
  43. #region 获取值
  44. /// <summary>
  45. /// 获取key的value值
  46. /// </summary>
  47. public string Get(string key)
  48. {
  49. return RedisBase.Core.GetValue(key);
  50. }
  51. /// <summary>
  52. /// 获取多个key的value值
  53. /// </summary>
  54. public List<string> Get(List<string> keys)
  55. {
  56. return RedisBase.Core.GetValues(keys);
  57. }
  58. /// <summary>
  59. /// 获取多个key的value值
  60. /// </summary>
  61. public List<T> Get<T>(List<string> keys)
  62. {
  63. return RedisBase.Core.GetValues<T>(keys);
  64. }
  65. #endregion
  66. #region 获取旧值赋上新值
  67. /// <summary>
  68. /// 获取旧值赋上新值
  69. /// </summary>
  70. public string GetAndSetValue(string key, string value)
  71. {
  72. return RedisBase.Core.GetAndSetValue(key, value);
  73. }
  74. #endregion
  75. #region 辅助方法
  76. /// <summary>
  77. /// 获取值的长度
  78. /// </summary>
  79. public long GetCount(string key)
  80. {
  81. return RedisBase.Core.GetStringCount(key);
  82. }
  83. /// <summary>
  84. /// 自增1,返回自增后的值
  85. /// </summary>
  86. public long Incr(string key)
  87. {
  88. return RedisBase.Core.IncrementValue(key);
  89. }
  90. /// <summary>
  91. /// 自增count,返回自增后的值
  92. /// </summary>
  93. public double IncrBy(string key, double count)
  94. {
  95. return RedisBase.Core.IncrementValueBy(key, count);
  96. }
  97. /// <summary>
  98. /// 自减1,返回自减后的值
  99. /// </summary>
  100. public long Decr(string key)
  101. {
  102. return RedisBase.Core.DecrementValue(key);
  103. }
  104. /// <summary>
  105. /// 自减count ,返回自减后的值
  106. /// </summary>
  107. /// <param name="key"></param>
  108. /// <param name="count"></param>
  109. /// <returns></returns>
  110. public long DecrBy(string key, int count)
  111. {
  112. return RedisBase.Core.DecrementValueBy(key, count);
  113. }
  114. #endregion
  115. }

.Net操作Redis数据类型List

  1. public class DoRedisList:DoRedisBase
  2. {
  3. #region 赋值
  4. /// <summary>
  5. /// 从左侧向list中添加值
  6. /// </summary>
  7. public void LPush(string key,string value)
  8. {
  9. RedisBase.Core.PushItemToList(key,value);
  10. }
  11. /// <summary>
  12. /// 从左侧向list中添加值,并设置过期时间
  13. /// </summary>
  14. public void LPush(string key, string value,DateTime dt)
  15. {
  16. RedisBase.Core.PushItemToList(key, value);
  17. RedisBase.Core.ExpireEntryAt(key,dt);
  18. }
  19. /// <summary>
  20. /// 从左侧向list中添加值,设置过期时间
  21. /// </summary>
  22. public void LPush(string key, string value, TimeSpan sp)
  23. {
  24. RedisBase.Core.PushItemToList(key, value);
  25. RedisBase.Core.ExpireEntryIn(key, sp);
  26. }
  27. /// <summary>
  28. /// 从左侧向list中添加值
  29. /// </summary>
  30. public void RPush(string key, string value)
  31. {
  32. RedisBase.Core.PrependItemToList(key,value);
  33. }
  34. /// <summary>
  35. /// 从右侧向list中添加值,并设置过期时间
  36. /// </summary>
  37. public void RPush(string key, string value, DateTime dt)
  38. {
  39. RedisBase.Core.PrependItemToList(key, value);
  40. RedisBase.Core.ExpireEntryAt(key, dt);
  41. }
  42. /// <summary>
  43. /// 从右侧向list中添加值,并设置过期时间
  44. /// </summary>
  45. public void RPush(string key, string value, TimeSpan sp)
  46. {
  47. RedisBase.Core.PrependItemToList(key, value);
  48. RedisBase.Core.ExpireEntryIn(key, sp);
  49. }
  50. /// <summary>
  51. /// 添加key/value
  52. /// </summary>
  53. public void Add(string key, string value)
  54. {
  55. RedisBase.Core.AddItemToList(key,value);
  56. }
  57. /// <summary>
  58. /// 添加key/value ,并设置过期时间
  59. /// </summary>
  60. public void Add(string key, string value,DateTime dt)
  61. {
  62. RedisBase.Core.AddItemToList(key, value);
  63. RedisBase.Core.ExpireEntryAt(key,dt);
  64. }
  65. /// <summary>
  66. /// 添加key/value。并添加过期时间
  67. /// </summary>
  68. public void Add(string key, string value,TimeSpan sp)
  69. {
  70. RedisBase.Core.AddItemToList(key, value);
  71. RedisBase.Core.ExpireEntryIn(key,sp);
  72. }
  73. /// <summary>
  74. /// 为key添加多个值
  75. /// </summary>
  76. public void Add(string key, List<string> values)
  77. {
  78. RedisBase.Core.AddRangeToList(key,values);
  79. }
  80. /// <summary>
  81. /// 为key添加多个值,并设置过期时间
  82. /// </summary>
  83. public void Add(string key, List<string> values,DateTime dt)
  84. {
  85. RedisBase.Core.AddRangeToList(key, values);
  86. RedisBase.Core.ExpireEntryAt(key,dt);
  87. }
  88. /// <summary>
  89. /// 为key添加多个值,并设置过期时间
  90. /// </summary>
  91. public void Add(string key, List<string> values,TimeSpan sp)
  92. {
  93. RedisBase.Core.AddRangeToList(key, values);
  94. RedisBase.Core.ExpireEntryIn(key,sp);
  95. }
  96. #endregion
  97. #region 获取值
  98. /// <summary>
  99. /// 获取list中key包含的数据数量
  100. /// </summary>
  101. public long Count(string key)
  102. {
  103. return RedisBase.Core.GetListCount(key);
  104. }
  105. /// <summary>
  106. /// 获取key包含的所有数据集合
  107. /// </summary>
  108. public List<string> Get(string key)
  109. {
  110. return RedisBase.Core.GetAllItemsFromList(key);
  111. }
  112. /// <summary>
  113. /// 获取key中下标为star到end的值集合
  114. /// </summary>
  115. public List<string> Get(string key,int star,int end)
  116. {
  117. return RedisBase.Core.GetRangeFromList(key,star,end);
  118. }
  119. #endregion
  120. #region 阻塞命令
  121. /// <summary>
  122. /// 阻塞命令:从list中keys的尾部移除一个值,并返回移除的值,阻塞时间为sp
  123. /// </summary>
  124. public string BlockingPopItemFromList(string key,TimeSpan? sp)
  125. {
  126. return RedisBase.Core.BlockingDequeueItemFromList(key,sp);
  127. }
  128. /// <summary>
  129. /// 阻塞命令:从list中keys的尾部移除一个值,并返回移除的值,阻塞时间为sp
  130. /// </summary>
  131. public ItemRef BlockingPopItemFromLists(string[] keys, TimeSpan? sp)
  132. {
  133. return RedisBase.Core.BlockingPopItemFromLists(keys, sp);
  134. }
  135. /// <summary>
  136. /// 阻塞命令:从list中keys的尾部移除一个值,并返回移除的值,阻塞时间为sp
  137. /// </summary>
  138. public string BlockingDequeueItemFromList(string key, TimeSpan? sp)
  139. {
  140. return RedisBase.Core.BlockingDequeueItemFromList(key, sp);
  141. }
  142. /// <summary>
  143. /// 阻塞命令:从list中keys的尾部移除一个值,并返回移除的值,阻塞时间为sp
  144. /// </summary>
  145. public ItemRef BlockingDequeueItemFromLists(string[] keys, TimeSpan? sp)
  146. {
  147. return RedisBase.Core.BlockingDequeueItemFromLists(keys, sp);
  148. }
  149. /// <summary>
  150. /// 阻塞命令:从list中key的头部移除一个值,并返回移除的值,阻塞时间为sp
  151. /// </summary>
  152. public string BlockingRemoveStartFromList(string keys, TimeSpan? sp)
  153. {
  154. return RedisBase.Core.BlockingRemoveStartFromList(keys, sp);
  155. }
  156. /// <summary>
  157. /// 阻塞命令:从list中key的头部移除一个值,并返回移除的值,阻塞时间为sp
  158. /// </summary>
  159. public ItemRef BlockingRemoveStartFromLists(string[] keys, TimeSpan? sp)
  160. {
  161. return RedisBase.Core.BlockingRemoveStartFromLists(keys, sp);
  162. }
  163. /// <summary>
  164. /// 阻塞命令:从list中一个fromkey的尾部移除一个值,添加到另外一个tokey的头部,并返回移除的值,阻塞时间为sp
  165. /// </summary>
  166. public string BlockingPopAndPushItemBetweenLists(string fromkey, string tokey, TimeSpan? sp)
  167. {
  168. return RedisBase.Core.BlockingPopAndPushItemBetweenLists(fromkey, tokey, sp);
  169. }
  170. #endregion
  171. #region 删除
  172. /// <summary>
  173. /// 从尾部移除数据,返回移除的数据
  174. /// </summary>
  175. public string PopItemFromList(string key)
  176. {
  177. return RedisBase.Core.PopItemFromList(key);
  178. }
  179. /// <summary>
  180. /// 移除list中,key/value,与参数相同的值,并返回移除的数量
  181. /// </summary>
  182. public long RemoveItemFromList(string key,string value)
  183. {
  184. return RedisBase.Core.RemoveItemFromList(key,value);
  185. }
  186. /// <summary>
  187. /// 从list的尾部移除一个数据,返回移除的数据
  188. /// </summary>
  189. public string RemoveEndFromList(string key)
  190. {
  191. return RedisBase.Core.RemoveEndFromList(key);
  192. }
  193. /// <summary>
  194. /// 从list的头部移除一个数据,返回移除的值
  195. /// </summary>
  196. public string RemoveStartFromList(string key)
  197. {
  198. return RedisBase.Core.RemoveStartFromList(key);
  199. }
  200. #endregion
  201. #region 其它
  202. /// <summary>
  203. /// 从一个list的尾部移除一个数据,添加到另外一个list的头部,并返回移动的值
  204. /// </summary>
  205. public string PopAndPushItemBetweenLists(string fromKey, string toKey)
  206. {
  207. return RedisBase.Core.PopAndPushItemBetweenLists(fromKey,toKey);
  208. }
  209. #endregion
  210. }

展现List的阻塞功能,类似一个简单的消息队列功能

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

.Net操作Redis数据类型Set

  1. public class DoRedisSet:DoRedisBase
  2. {
  3. #region 添加
  4. /// <summary>
  5. /// key集合中添加value值
  6. /// </summary>
  7. public void Add(string key, string value)
  8. {
  9. RedisBase.Core.AddItemToSet(key,value);
  10. }
  11. /// <summary>
  12. /// key集合中添加list集合
  13. /// </summary>
  14. public void Add(string key, List<string> list)
  15. {
  16. RedisBase.Core.AddRangeToSet(key, list);
  17. }
  18. #endregion
  19. #region 获取
  20. /// <summary>
  21. /// 随机获取key集合中的一个值
  22. /// </summary>
  23. public string GetRandomItemFromSet(string key)
  24. {
  25. return RedisBase.Core.GetRandomItemFromSet(key);
  26. }
  27. /// <summary>
  28. /// 获取key集合值的数量
  29. /// </summary>
  30. public long GetCount(string key)
  31. {
  32. return RedisBase.Core.GetSetCount(key);
  33. }
  34. /// <summary>
  35. /// 获取所有key集合的值
  36. /// </summary>
  37. public HashSet<string> GetAllItemsFromSet(string key)
  38. {
  39. return RedisBase.Core.GetAllItemsFromSet(key);
  40. }
  41. #endregion
  42. #region 删除
  43. /// <summary>
  44. /// 随机删除key集合中的一个值
  45. /// </summary>
  46. public string PopItemFromSet(string key)
  47. {
  48. return RedisBase.Core.PopItemFromSet(key);
  49. }
  50. /// <summary>
  51. /// 删除key集合中的value
  52. /// </summary>
  53. public void RemoveItemFromSet(string key, string value)
  54. {
  55. RedisBase.Core.RemoveItemFromSet(key,value);
  56. }
  57. #endregion
  58. #region 其它
  59. /// <summary>
  60. /// 从fromkey集合中移除值为value的值,并把value添加到tokey集合中
  61. /// </summary>
  62. public void MoveBetweenSets(string fromkey,string tokey,string value)
  63. {
  64. RedisBase.Core.MoveBetweenSets(fromkey,tokey,value);
  65. }
  66. /// <summary>
  67. /// 返回keys多个集合中的并集,返还hashset
  68. /// </summary>
  69. public HashSet<string> GetUnionFromSets(string[] keys)
  70. {
  71. return RedisBase.Core.GetUnionFromSets(keys);
  72. }
  73. /// <summary>
  74. /// keys多个集合中的并集,放入newkey集合中
  75. /// </summary>
  76. public void StoreUnionFromSets(string newkey, string[] keys)
  77. {
  78. RedisBase.Core.StoreUnionFromSets(newkey,keys);
  79. }
  80. /// <summary>
  81. /// 把fromkey集合中的数据与keys集合中的数据对比,fromkey集合中不存在keys集合中,则把这些不存在的数据放入newkey集合中
  82. /// </summary>
  83. public void StoreDifferencesFromSet(string newkey, string fromkey, string[] keys)
  84. {
  85. RedisBase.Core.StoreDifferencesFromSet(newkey,fromkey,keys);
  86. }
  87. #endregion
  88. }

.Net操作Redis数据类型有序集合Zset

  1. public class DoRedisZSet : DoRedisBase
  2. {
  3. #region 添加
  4. /// <summary>
  5. /// 添加key/value,默认分数是从1.多*10的9次方以此递增的,自带自增效果
  6. /// </summary>
  7. public bool AddItemToSortedSet(string key, string value)
  8. {
  9. return RedisBase.Core.AddItemToSortedSet(key, value);
  10. }
  11. /// <summary>
  12. /// 添加key/value,并设置value的分数
  13. /// </summary>
  14. public bool AddItemToSortedSet(string key, string value, double score)
  15. {
  16. return RedisBase.Core.AddItemToSortedSet(key, value, score);
  17. }
  18. /// <summary>
  19. /// 为key添加values集合,values集合中每个value的分数设置为score
  20. /// </summary>
  21. public bool AddRangeToSortedSet(string key,List<string> values,double score)
  22. {
  23. return RedisBase.Core.AddRangeToSortedSet(key, values, score);
  24. }
  25. /// <summary>
  26. /// 为key添加values集合,values集合中每个value的分数设置为score
  27. /// </summary>
  28. public bool AddRangeToSortedSet(string key, List<string> values, long score)
  29. {
  30. return RedisBase.Core.AddRangeToSortedSet(key, values, score);
  31. }
  32. #endregion
  33. #region 获取
  34. /// <summary>
  35. /// 获取key的所有集合
  36. /// </summary>
  37. public List<string> GetAllItemsFromSortedSet(string key)
  38. {
  39. return RedisBase.Core.GetAllItemsFromSortedSet(key);
  40. }
  41. /// <summary>
  42. /// 获取key的所有集合,倒叙输出
  43. /// </summary>
  44. public List<string> GetAllItemsFromSortedSetDesc(string key)
  45. {
  46. return RedisBase.Core.GetAllItemsFromSortedSetDesc(key);
  47. }
  48. /// <summary>
  49. /// 获取可以的说有集合,带分数
  50. /// </summary>
  51. public IDictionary<string, double> GetAllWithScoresFromSortedSet(string key)
  52. {
  53. return RedisBase.Core.GetAllWithScoresFromSortedSet(key);
  54. }
  55. /// <summary>
  56. /// 获取key为value的下标值
  57. /// </summary>
  58. public long GetItemIndexInSortedSet(string key, string value)
  59. {
  60. return RedisBase.Core.GetItemIndexInSortedSet(key, value);
  61. }
  62. /// <summary>
  63. /// 倒叙排列获取key为value的下标值
  64. /// </summary>
  65. public long GetItemIndexInSortedSetDesc(string key, string value)
  66. {
  67. return RedisBase.Core.GetItemIndexInSortedSetDesc(key, value);
  68. }
  69. /// <summary>
  70. /// 获取key为value的分数
  71. /// </summary>
  72. public double GetItemScoreInSortedSet(string key,string value)
  73. {
  74. return RedisBase.Core.GetItemScoreInSortedSet(key,value);
  75. }
  76. /// <summary>
  77. /// 获取key所有集合的数据总数
  78. /// </summary>
  79. public long GetSortedSetCount(string key)
  80. {
  81. return RedisBase.Core.GetSortedSetCount(key);
  82. }
  83. /// <summary>
  84. /// key集合数据从分数为fromscore到分数为toscore的数据总数
  85. /// </summary>
  86. public long GetSortedSetCount(string key,double fromScore,double toScore)
  87. {
  88. return RedisBase.Core.GetSortedSetCount(key,fromScore,toScore);
  89. }
  90. /// <summary>
  91. /// 获取key集合从高分到低分排序数据,分数从fromscore到分数为toscore的数据
  92. /// </summary>
  93. public List<string> GetRangeFromSortedSetByHighestScore(string key, double fromscore, double toscore)
  94. {
  95. return RedisBase.Core.GetRangeFromSortedSetByHighestScore(key, fromscore, toscore);
  96. }
  97. /// <summary>
  98. /// 获取key集合从低分到高分排序数据,分数从fromscore到分数为toscore的数据
  99. /// </summary>
  100. public List<string> GetRangeFromSortedSetByLowestScore(string key, double fromscore, double toscore)
  101. {
  102. return RedisBase.Core.GetRangeFromSortedSetByLowestScore(key, fromscore, toscore);
  103. }
  104. /// <summary>
  105. /// 获取key集合从高分到低分排序数据,分数从fromscore到分数为toscore的数据,带分数
  106. /// </summary>
  107. public IDictionary<string, double> GetRangeWithScoresFromSortedSetByHighestScore(string key, double fromscore, double toscore)
  108. {
  109. return RedisBase.Core.GetRangeWithScoresFromSortedSetByHighestScore(key, fromscore, toscore);
  110. }
  111. /// <summary>
  112. /// 获取key集合从低分到高分排序数据,分数从fromscore到分数为toscore的数据,带分数
  113. /// </summary>
  114. public IDictionary<string, double> GetRangeWithScoresFromSortedSetByLowestScore(string key, double fromscore, double toscore)
  115. {
  116. return RedisBase.Core.GetRangeWithScoresFromSortedSetByLowestScore(key, fromscore, toscore);
  117. }
  118. /// <summary>
  119. /// 获取key集合数据,下标从fromRank到分数为toRank的数据
  120. /// </summary>
  121. public List<string> GetRangeFromSortedSet(string key, int fromRank, int toRank)
  122. {
  123. return RedisBase.Core.GetRangeFromSortedSet(key, fromRank, toRank);
  124. }
  125. /// <summary>
  126. /// 获取key集合倒叙排列数据,下标从fromRank到分数为toRank的数据
  127. /// </summary>
  128. public List<string> GetRangeFromSortedSetDesc(string key, int fromRank, int toRank)
  129. {
  130. return RedisBase.Core.GetRangeFromSortedSetDesc(key, fromRank, toRank);
  131. }
  132. /// <summary>
  133. /// 获取key集合数据,下标从fromRank到分数为toRank的数据,带分数
  134. /// </summary>
  135. public IDictionary<string, double> GetRangeWithScoresFromSortedSet(string key, int fromRank, int toRank)
  136. {
  137. return RedisBase.Core.GetRangeWithScoresFromSortedSet(key, fromRank, toRank);
  138. }
  139. /// <summary>
  140. /// 获取key集合倒叙排列数据,下标从fromRank到分数为toRank的数据,带分数
  141. /// </summary>
  142. public IDictionary<string, double> GetRangeWithScoresFromSortedSetDesc(string key, int fromRank, int toRank)
  143. {
  144. return RedisBase.Core.GetRangeWithScoresFromSortedSetDesc(key, fromRank, toRank);
  145. }
  146. #endregion
  147. #region 删除
  148. /// <summary>
  149. /// 删除key为value的数据
  150. /// </summary>
  151. public bool RemoveItemFromSortedSet(string key,string value)
  152. {
  153. return RedisBase.Core.RemoveItemFromSortedSet(key, value);
  154. }
  155. /// <summary>
  156. /// 删除下标从minRank到maxRank的key集合数据
  157. /// </summary>
  158. public long RemoveRangeFromSortedSet(string key,int minRank,int maxRank)
  159. {
  160. return RedisBase.Core.RemoveRangeFromSortedSet(key,minRank,maxRank);
  161. }
  162. /// <summary>
  163. /// 删除分数从fromscore到toscore的key集合数据
  164. /// </summary>
  165. public long RemoveRangeFromSortedSetByScore(string key, double fromscore, double toscore)
  166. {
  167. return RedisBase.Core.RemoveRangeFromSortedSetByScore(key, fromscore, toscore);
  168. }
  169. /// <summary>
  170. /// 删除key集合中分数最大的数据
  171. /// </summary>
  172. public string PopItemWithHighestScoreFromSortedSet(string key)
  173. {
  174. return RedisBase.Core.PopItemWithHighestScoreFromSortedSet(key);
  175. }
  176. /// <summary>
  177. /// 删除key集合中分数最小的数据
  178. /// </summary>
  179. public string PopItemWithLowestScoreFromSortedSet(string key)
  180. {
  181. return RedisBase.Core.PopItemWithLowestScoreFromSortedSet(key);
  182. }
  183. #endregion
  184. #region 其它
  185. /// <summary>
  186. /// 判断key集合中是否存在value数据
  187. /// </summary>
  188. public bool SortedSetContainsItem(string key, string value)
  189. {
  190. return RedisBase.Core.SortedSetContainsItem(key,value);
  191. }
  192. /// <summary>
  193. /// 为key集合值为value的数据,分数加scoreby,返回相加后的分数
  194. /// </summary>
  195. public double IncrementItemInSortedSet(string key,string value,double scoreBy)
  196. {
  197. return RedisBase.Core.IncrementItemInSortedSet(key,value,scoreBy);
  198. }
  199. /// <summary>
  200. /// 获取keys多个集合的交集,并把交集添加的newkey集合中,返回交集数据的总数
  201. /// </summary>
  202. public long StoreIntersectFromSortedSets(string newkey, string[] keys)
  203. {
  204. return RedisBase.Core.StoreIntersectFromSortedSets(newkey,keys);
  205. }
  206. /// <summary>
  207. /// 获取keys多个集合的并集,并把并集数据添加到newkey集合中,返回并集数据的总数
  208. /// </summary>
  209. public long StoreUnionFromSortedSets(string newkey, string[] keys)
  210. {
  211. return RedisBase.Core.StoreUnionFromSortedSets(newkey, keys);
  212. }
  213. #endregion
  214. }

.Net操作Redis数据类型哈希Hash

  1. public class DoRedisHash :DoRedisBase
  2. {
  3. #region 添加
  4. /// <summary>
  5. /// 向hashid集合中添加key/value
  6. /// </summary>
  7. public bool SetEntryInHash(string hashid, string key, string value)
  8. {
  9. return RedisBase.Core.SetEntryInHash(hashid,key,value);
  10. }
  11. /// <summary>
  12. /// 如果hashid集合中存在key/value则不添加返回false,如果不存在在添加key/value,返回true
  13. /// </summary>
  14. public bool SetEntryInHashIfNotExists(string hashid, string key, string value)
  15. {
  16. return RedisBase.Core.SetEntryInHashIfNotExists(hashid, key, value);
  17. }
  18. /// <summary>
  19. /// 存储对象T t到hash集合中
  20. /// </summary>
  21. public void StoreAsHash<T>(T t)
  22. {
  23. RedisBase.Core.StoreAsHash<T>(t);
  24. }
  25. #endregion
  26. #region 获取
  27. /// <summary>
  28. /// 获取对象T中ID为id的数据。
  29. /// </summary>
  30. public T GetFromHash<T>(object id)
  31. {
  32. return RedisBase.Core.GetFromHash<T>(id);
  33. }
  34. /// <summary>
  35. /// 获取所有hashid数据集的key/value数据集合
  36. /// </summary>
  37. public Dictionary<string, string> GetAllEntriesFromHash(string hashid)
  38. {
  39. return RedisBase.Core.GetAllEntriesFromHash(hashid);
  40. }
  41. /// <summary>
  42. /// 获取hashid数据集中的数据总数
  43. /// </summary>
  44. public long GetHashCount(string hashid)
  45. {
  46. return RedisBase.Core.GetHashCount(hashid);
  47. }
  48. /// <summary>
  49. /// 获取hashid数据集中所有key的集合
  50. /// </summary>
  51. public List<string> GetHashKeys(string hashid)
  52. {
  53. return RedisBase.Core.GetHashKeys(hashid);
  54. }
  55. /// <summary>
  56. /// 获取hashid数据集中的所有value集合
  57. /// </summary>
  58. public List<string> GetHashValues(string hashid)
  59. {
  60. return RedisBase.Core.GetHashValues(hashid);
  61. }
  62. /// <summary>
  63. /// 获取hashid数据集中,key的value数据
  64. /// </summary>
  65. public string GetValueFromHash(string hashid, string key)
  66. {
  67. return RedisBase.Core.GetValueFromHash(hashid, key);
  68. }
  69. /// <summary>
  70. /// 获取hashid数据集中,多个keys的value集合
  71. /// </summary>
  72. public List<string> GetValuesFromHash(string hashid, string[] keys)
  73. {
  74. return RedisBase.Core.GetValuesFromHash(hashid, keys);
  75. }
  76. #endregion
  77. #region 删除
  78. #endregion
  79. /// <summary>
  80. /// 删除hashid数据集中的key数据
  81. /// </summary>
  82. public bool RemoveEntryFromHash(string hashid, string key)
  83. {
  84. return RedisBase.Core.RemoveEntryFromHash(hashid, key);
  85. }
  86. #region 其它
  87. /// <summary>
  88. /// 判断hashid数据集中是否存在key的数据
  89. /// </summary>
  90. public bool HashContainsEntry(string hashid, string key)
  91. {
  92. return RedisBase.Core.HashContainsEntry(hashid,key);
  93. }
  94. /// <summary>
  95. /// 给hashid数据集key的value加countby,返回相加后的数据
  96. /// </summary>
  97. public double IncrementValueInHash(string hashid, string key, double countBy)
  98. {
  99. return RedisBase.Core.IncrementValueInHash(hashid, key, countBy);
  100. }
  101. #endregion
  102. }

.Net操作Redis中的事务与锁

  1. static void Main(string[] args)
  2. {
  3. //清空数据库
  4. DoRedisBase.Core.FlushAll();
  5. //声明事务
  6. using (var tran = RedisManager.GetClient().CreateTransaction())
  7. {
  8. try
  9. {
  10. tran.QueueCommand(p =>
  11. {
  12. //操作redis数据命令
  13. DoRedisBase.Core.Set<int>("name", 30);
  14. long i = DoRedisBase.Core.IncrementValueBy("name", 1);
  15. });
  16. //提交事务
  17. tran.Commit();
  18. }
  19. catch
  20. {
  21. //回滚事务
  22. tran.Rollback();
  23. }
  24. ////操作redis数据命令
  25. //RedisManager.GetClient().Set<int>("zlh", 30);
  26. ////声明锁,网页程序可获得锁效果
  27. //using (RedisManager.GetClient().AcquireLock("zlh"))
  28. //{
  29. // RedisManager.GetClient().Set<int>("zlh", 31);
  30. // Thread.Sleep(10000);
  31. //}
  32. }
  33. Console.ReadKey();
  34. }

.Net使用Redis详解之ServiceStack.Redis(7)的更多相关文章

  1. .Net使用Redis详解之ServiceStack.Redis(七) 转载https://www.cnblogs.com/knowledgesea/p/5032101.html

    .Net使用Redis详解之ServiceStack.Redis(七)   序言 本篇从.Net如何接入Reis开始,直至.Net对Redis的各种操作,为了方便学习与做为文档的查看,我做一遍注释展现 ...

  2. .Net使用Redis详解之ServiceStack.Redis(七)

    序言 本篇从.Net如何接入Reis开始,直至.Net对Redis的各种操作,为了方便学习与做为文档的查看,我做一遍注释展现,其中会对list的阻塞功能和事务的运用做二个案例,进行记录学习. Redi ...

  3. .Net使用Redis详解之ServiceStack.Redis

    序言 本篇从.Net如何接入Reis开始,直至.Net对Redis的各种操作,为了方便学习与做为文档的查看,我做一遍注释展现,其中会对list的阻塞功能和事务的运用做二个案例,进行记录学习. Redi ...

  4. Redis 详解 (一) StackExchange.Redis Client

    这期我们来看StackExchange.Redis,这是redis 的.net客户端之一.Redis是一个开源的内存数据存储,可以用来做数据库,缓存或者消息代理服务.目前有不少人在使用ServiceS ...

  5. 基础拾遗------redis详解

    基础拾遗 基础拾遗------特性详解 基础拾遗------webservice详解 基础拾遗------redis详解 基础拾遗------反射详解 基础拾遗------委托详解 基础拾遗----- ...

  6. Spring Data操作Redis详解

    Spring Data操作Redis详解 Redis是一种NOSQL数据库,Key-Value形式对数据进行存储,其中数据可以以内存形式存在,也可以持久化到文件系统.Spring data对Redis ...

  7. Redis详解入门篇

    Redis详解入门篇 [本教程目录] 1.redis是什么2.redis的作者3.谁在使用redis4.学会安装redis5.学会启动redis6.使用redis客户端7.redis数据结构 – 简介 ...

  8. redis详解(二)-- 数据类型详解

    Redis常用数据类型详解 1,Redis最为常用的数据类型主要有以下: String Hash List Set Sorted set pub/sub Transactions 在具体描述这几种数据 ...

  9. Redis详解入门篇(转载)

    Redis详解入门篇(转载) [本教程目录] 1.redis是什么2.redis的作者3.谁在使用redis4.学会安装redis5.学会启动redis6.使用redis客户端7.redis数据结构 ...

随机推荐

  1. hdu3374 String Problem

    地址:http://acm.hdu.edu.cn/showproblem.php?pid=3374 题目: String Problem Time Limit: 2000/1000 MS (Java/ ...

  2. apache服务器设置

    服务器目录 目录说明 bin: apache常用的一些命令 cgi-bin:存放一些脚本语言命令 conf:apache配置文件 error:错误记录 htodcs存放站点文件 logs:记录日志 m ...

  3. Ubuntu16.04 Xmind安装

    Ubuntu16.04 Xmind安装: 官网下载:直接下载不用注册: 到下载目录选择下载文件右键,提取到此处(为登录用户权限):在终端采用root权限解压为root权限(unzip xmind-8- ...

  4. Linux 系统日志管理 rsyslogd配置文件

    rsyslogd配置文件  rsyslogd 服务是依赖其配置文件 /etc/rsyslog.conf 来确定哪个服务的什么等级的日志信息会被记录在哪个位置的.也就是说,日志服务的配置文件中主要定义了 ...

  5. Chrome搜索设置

    https://encrypted.google.com/ncr https://encrypted.google.com/search?{google:RLZ}{google:acceptedSug ...

  6. 对于JVM中方法区,永久代,元空间以及字符串常量池的迁移和string.intern方法

    在Java虚拟机(以下简称JVM)中,类包含其对应的元数据,比如类的层级信息,方法数据和方法信息(如字节码,栈和变量大小),运行时常量池,已确定的符号引用和虚方法表. 在过去(当自定义类加载器使用不普 ...

  7. 企业和开发人员究竟该如何适应web标准?

    以下几点注意事项仅供参考:完善的前期策划和分析完善的前期逻辑模型以及项目规范性文档的制定尽可能将行政性干预移到策划阶段(按照国内的情况,做到这一点可能很困难)尽可能向后兼容,在项目规范性文档制定阶段对 ...

  8. SpringMvc接受特殊符号参数被转义

    WEB开发时,在前端通过get / post 方法传递参数的时候  如果实参附带特殊符号,后端接收到的值中特殊符号就会被转义 例如该请求: http://localhost:10001/demo/in ...

  9. 20145230熊佳炜《网络对抗》实验五:MSF基础应用

    20145230熊佳炜<网络对抗>实验五:MSF基础应用 主动攻击 首先,我们需要弄一个xp sp3 English系统的虚拟机,然后本次主动攻击就在我们kali和xp之间来完成. 然后我 ...

  10. 大端和小端(big endian little endian)

    一.大端和小端的问题 对于整型.长整型等数据类型,Big endian 认为第一个字节是最高位字节(按照从低地址到高地址的顺序存放数据的高位字节到低位字节):而 Little endian 则相反,它 ...