redis封装工具二

  1. using ServiceStack.Redis;  
  2. using System;  
  3. using System.Collections.Generic;  
  4. using System.Configuration;  
  5. using System.Linq;  
  6. using System.Web;  
  7.   
  8. namespace Redis.Common  
  9. {  
  10.     public class RedisHelper  
  11.     {  
  12.         #region 连接信息  
  13.         //从配置文件中获取连接字符串  
  14.         private static string RedisPath = ConfigurationManager.AppSettings["RedisPath"].ToString();  
  15.         public static PooledRedisClientManager Prcm = CreateManager(new string[] { RedisPath }, new string[] { RedisPath });  
  16.         private static PooledRedisClientManager CreateManager(string[] readWriteHosts, string[] readOnlyHosts)  
  17.         {  
  18.             // 支持读写分离,均衡负载   
  19.             return new PooledRedisClientManager(readWriteHosts, readOnlyHosts, new RedisClientManagerConfig  
  20.             {  
  21.                 MaxWritePoolSize = 5, // “写”链接池链接数   
  22.                 MaxReadPoolSize = 5, // “读”链接池链接数   
  23.                 AutoStart = true,  
  24.             });  
  25.         }  
  26.         #endregion  
  27.  
  28.         #region Item  
  29.         /// <summary>  
  30.         /// 设置单体  
  31.         /// </summary>  
  32.         /// <typeparam name="T">类型</typeparam>  
  33.         /// <param name="key">单体key</param>  
  34.         /// <param name="t">对象</param>  
  35.         /// <returns>操作是否成功</returns>  
  36.         public static bool ItemSet<T>(string key, T t)  
  37.         {  
  38.             using (IRedisClient redis = Prcm.GetClient())  
  39.             {  
  40.                 return redis.Set<T>(key, t, new TimeSpan(1, 0, 0));  
  41.             }  
  42.         }  
  43.         /// <summary>  
  44.         /// 获取单体  
  45.         /// </summary>  
  46.         /// <typeparam name="T">类型</typeparam>  
  47.         /// <param name="key">单体key</param>  
  48.         /// <returns>对象</returns>  
  49.         public static T ItemGet<T>(string key)  
  50.         {  
  51.             using (IRedisClient redis = Prcm.GetClient())  
  52.             {  
  53.                 return redis.Get<T>(key);  
  54.             }  
  55.         }  
  56.         #endregion  
  57.  
  58.         #region Hash  
  59.         /// <summary>  
  60.         /// 存储数据到Hash表  
  61.         /// </summary>  
  62.         /// <typeparam name="T">类型</typeparam>  
  63.         /// <param name="key">Hash key</param>  
  64.         /// <param name="dataKey">dataKey</param>  
  65.         public static void HashSet<T>(string key, string dataKey, T t)  
  66.         {  
  67.             using (IRedisClient redis = Prcm.GetClient())  
  68.             {  
  69.                 string value = ServiceStack.Text.JsonSerializer.SerializeToString<T>(t);  
  70.                 redis.SetEntryInHash(key, dataKey, value);  
  71.             }  
  72.         }  
  73.         /// <summary>  
  74.         /// 移除Hash中的某值  
  75.         /// </summary>  
  76.         /// <param name="key">Hash key</param>  
  77.         /// <param name="dataKey">dataKey</param>  
  78.         /// <returns>操作是否成功</returns>  
  79.         public static bool HashRemove(string key, string dataKey)  
  80.         {  
  81.             using (IRedisClient redis = Prcm.GetClient())  
  82.             {  
  83.                 return redis.RemoveEntryFromHash(key, dataKey);  
  84.             }  
  85.         }  
  86.         /// <summary>  
  87.         /// 从Hash表获取数据  
  88.         /// </summary>  
  89.         /// <typeparam name="T">类型</typeparam>  
  90.         /// <param name="key">Hash key</param>  
  91.         /// <param name="dataKey">dataKey</param>  
  92.         /// <returns>对象</returns>  
  93.         public static T HashGet<T>(string key, string dataKey)  
  94.         {  
  95.             using (IRedisClient redis = Prcm.GetClient())  
  96.             {  
  97.                 string value = redis.GetValueFromHash(key, dataKey);  
  98.                 return ServiceStack.Text.JsonSerializer.DeserializeFromString<T>(value);  
  99.             }  
  100.         }  
  101.         /// <summary>  
  102.         /// 获取整个Hash的数据  
  103.         /// </summary>  
  104.         /// <typeparam name="T">类型</typeparam>  
  105.         /// <param name="key">Hash key</param>  
  106.         /// <returns>List集合</returns>  
  107.         public static List<T> HashGetAll<T>(string key)  
  108.         {  
  109.             using (IRedisClient redis = Prcm.GetClient())  
  110.             {  
  111.                 var list = redis.GetHashValues(key);  
  112.                 if (list != null && list.Count > 0)  
  113.                 {  
  114.                     List<T> result = new List<T>();  
  115.                     foreach (var item in list)  
  116.                     {  
  117.                         var value = ServiceStack.Text.JsonSerializer.DeserializeFromString<T>(item);  
  118.                         result.Add(value);  
  119.                     }  
  120.                     return result;  
  121.                 }  
  122.                 return null;  
  123.             }  
  124.         }  
  125.         /// <summary>  
  126.         /// 判断某个数据是否已经被缓存  
  127.         /// </summary>  
  128.         /// <typeparam name="T">类型</typeparam>  
  129.         /// <param name="key">Hash key</param>  
  130.         /// <param name="dataKey">dateKey</param>  
  131.         /// <returns>是否被缓存</returns>  
  132.         public static bool HashExist<T>(string key, string dataKey)  
  133.         {  
  134.             using (IRedisClient redis = Prcm.GetClient())  
  135.             {  
  136.                 return redis.HashContainsEntry(key, dataKey);  
  137.             }  
  138.         }  
  139.         /// <summary>  
  140.         /// 统计Hash集合的项数  
  141.         /// </summary>  
  142.         /// <param name="key">Hash key</param>  
  143.         /// <returns>项数</returns>  
  144.         public static long HashCount(string key)  
  145.         {  
  146.             using (IRedisClient redis = Prcm.GetClient())  
  147.             {  
  148.                 return redis.GetHashCount(key);  
  149.             }  
  150.         }  
  151.         #endregion  
  152.  
  153.         #region List  
  154.         /// <summary>  
  155.         /// 添加对象到List集合头部  
  156.         /// </summary>  
  157.         /// <typeparam name="T">类型</typeparam>  
  158.         /// <param name="key">List key</param>  
  159.         /// <param name="t">对象</param>  
  160.         public static void ListAdd<T>(string key, T t)  
  161.         {  
  162.             using (IRedisClient redis = Prcm.GetClient())  
  163.             {  
  164.                 var redisTypedClient = redis.As<T>();  
  165.                 redisTypedClient.AddItemToList(redisTypedClient.Lists[key], t);  
  166.             }  
  167.         }  
  168.         /// <summary>  
  169.         /// 从List集合中移除指定的对象  
  170.         /// </summary>  
  171.         /// <typeparam name="T">类型</typeparam>  
  172.         /// <param name="key">List key</param>  
  173.         /// <param name="t">对象</param>  
  174.         /// <returns>操作是否成功</returns>  
  175.         public static bool ListRemove<T>(string key, T t)  
  176.         {  
  177.             using (IRedisClient redis = Prcm.GetClient())  
  178.             {  
  179.                 var redisTypedClient = redis.As<T>();  
  180.                 return redisTypedClient.RemoveItemFromList(redisTypedClient.Lists[key], t) > 0;  
  181.             }  
  182.         }  
  183.         /// <summary>  
  184.         /// 获取指定key中List集合的所有对象  
  185.         /// </summary>  
  186.         /// <typeparam name="T">类型</typeparam>  
  187.         /// <param name="key">List key</param>  
  188.         /// <returns>List集合</returns>  
  189.         public static List<T> ListGetList<T>(string key)  
  190.         {  
  191.             using (IRedisClient redis = Prcm.GetClient())  
  192.             {  
  193.                 var c = redis.As<T>();  
  194.                 return c.Lists[key].GetRange(0, c.Lists[key].Count);  
  195.             }  
  196.         }  
  197.         /// <summary>  
  198.         /// 分页查询List集合(分页从尾部开始计算)  
  199.         /// </summary>  
  200.         /// <typeparam name="T">类型</typeparam>  
  201.         /// <param name="key">List key</param>  
  202.         /// <param name="pageIndex">页码</param>  
  203.         /// <param name="pageSize">页条数</param>  
  204.         /// <returns>List集合</returns>  
  205.         public static List<T> ListGetList<T>(string key, int pageIndex, int pageSize)  
  206.         {  
  207.             int start = pageSize * (pageIndex - 1);  
  208.             return ListGetRange<T>(key, start, pageSize);  
  209.         }  
  210.         /// <summary>  
  211.         /// 获取List集合中指定下标的对象集合(下标从尾部开始计算)  
  212.         /// </summary>  
  213.         /// <typeparam name="T">类型</typeparam>  
  214.         /// <param name="key">List key</param>  
  215.         /// <param name="start">开始下标</param>  
  216.         /// <param name="count">结束下标</param>  
  217.         /// <returns>List集合</returns>  
  218.         public static List<T> ListGetRange<T>(string key, int start, int count)  
  219.         {  
  220.             using (IRedisClient redis = Prcm.GetClient())  
  221.             {  
  222.                 var c = redis.As<T>();  
  223.                 return c.Lists[key].GetRange(start, start + count - 1);  
  224.             }  
  225.         }  
  226.         /// <summary>  
  227.         /// 统计List集合的项数  
  228.         /// </summary>  
  229.         /// <param name="key">List key</param>  
  230.         /// <returns>项数</returns>  
  231.         public static long ListCount(string key)  
  232.         {  
  233.             using (IRedisClient redis = Prcm.GetClient())  
  234.             {  
  235.                 return redis.GetListCount(key);  
  236.             }  
  237.         }  
  238.         /// <summary>  
  239.         /// 将对象入队到List集合的尾部  
  240.         /// </summary>  
  241.         /// <typeparam name="T">类型</typeparam>  
  242.         /// <param name="key">List key</param>  
  243.         /// <param name="t">对象</param>  
  244.         public static void ListEnqueue<T>(string key, T t)  
  245.         {  
  246.             using (IRedisClient redis = Prcm.GetClient())  
  247.             {  
  248.                 var redisTypedClient = redis.As<T>();  
  249.                 redisTypedClient.EnqueueItemOnList(redisTypedClient.Lists[key], t);  
  250.             }  
  251.         }  
  252.         /// <summary>  
  253.         /// 将List集合头部的对象出队  
  254.         /// </summary>  
  255.         /// <typeparam name="T">类型</typeparam>  
  256.         /// <param name="key">List key</param>  
  257.         /// <returns>尾部对象</returns>  
  258.         public static T ListDequeue<T>(string key)  
  259.         {  
  260.             using (IRedisClient redis = Prcm.GetClient())  
  261.             {  
  262.                 var redisTypedClient = redis.As<T>();  
  263.                 return redisTypedClient.DequeueItemFromList(redisTypedClient.Lists[key]);  
  264.             }  
  265.         }  
  266.         #endregion  
  267.  
  268.         #region Set  
  269.         /// <summary>  
  270.         /// 添加对象到Set中  
  271.         /// </summary>  
  272.         /// <typeparam name="T">类型</typeparam>  
  273.         /// <param name="key">Set key</param>  
  274.         /// <param name="t">对象</param>  
  275.         public static void SetAdd<T>(string key, T t)  
  276.         {  
  277.             using (IRedisClient redis = Prcm.GetClient())  
  278.             {  
  279.                 var redisTypedClient = redis.As<T>();  
  280.                 redisTypedClient.Sets[key].Add(t);  
  281.             }  
  282.         }  
  283.         /// <summary>  
  284.         /// 移除Set中的指定对象  
  285.         /// </summary>  
  286.         /// <typeparam name="T">类型</typeparam>  
  287.         /// <param name="key">Set key</param>  
  288.         /// <param name="t">对象</param>  
  289.         /// <returns>操作是否成功</returns>  
  290.         public static bool SetRemove<T>(string key, T t)  
  291.         {  
  292.             using (IRedisClient redis = Prcm.GetClient())  
  293.             {  
  294.                 var redisTypedClient = redis.As<T>();  
  295.                 return redisTypedClient.Sets[key].Remove(t);  
  296.             }  
  297.         }  
  298.         /// <summary>  
  299.         /// 获取Set中所有对象  
  300.         /// </summary>  
  301.         /// <typeparam name="T">类型</typeparam>  
  302.         /// <param name="key">Set key</param>  
  303.         /// <returns>List集合</returns>  
  304.         public static List<T> SetGetAll<T>(string key)  
  305.         {  
  306.             using (IRedisClient redis = Prcm.GetClient())  
  307.             {  
  308.                 var redisTypedClient = redis.As<T>();  
  309.                 var list = redisTypedClient.Sets[key].GetAll();  
  310.                 if (list != null && list.Count > 0)  
  311.                 {  
  312.                     List<T> result = new List<T>();  
  313.                     foreach (T item in list)  
  314.                     {  
  315.                         result.Add(item);  
  316.                     }  
  317.                     return result;  
  318.                 }  
  319.             }  
  320.             return null;  
  321.         }  
  322.         /// <summary>  
  323.         /// 判断Set中的指定对象是否存在  
  324.         /// </summary>  
  325.         /// <typeparam name="T">类型</typeparam>  
  326.         /// <param name="key">Set key</param>  
  327.         /// <param name="t">对象</param>  
  328.         /// <returns>是否存在</returns>  
  329.         public static bool SetContains<T>(string key, T t)  
  330.         {  
  331.             using (IRedisClient redis = Prcm.GetClient())  
  332.             {  
  333.                 var redisTypedClient = redis.As<T>();  
  334.                 return redisTypedClient.Sets[key].Contains(t);  
  335.             }  
  336.         }  
  337.         /// <summary>  
  338.         /// 获取Set的个数  
  339.         /// </summary>  
  340.         /// <param name="key">Set key</param>  
  341.         /// <returns>个数</returns>  
  342.         public static long SetCount(string key)  
  343.         {  
  344.             using (IRedisClient redis = Prcm.GetClient())  
  345.             {  
  346.                 return redis.GetSetCount(key);  
  347.             }  
  348.         }  
  349.         #endregion  
  350.  
  351.         #region SortedSet  
  352.         /// <summary>  
  353.         ///  添加数据到SortedSet  
  354.         /// </summary>  
  355.         /// <typeparam name="T">类型</typeparam>  
  356.         /// <param name="key">SortedSet key</param>  
  357.         /// <param name="t">对象</param>  
  358.         /// <returns>操作是否成功</returns>  
  359.         public static bool SortedSetAdd<T>(string key, T t)  
  360.         {  
  361.             using (IRedisClient redis = Prcm.GetClient())  
  362.             {  
  363.                 string value = ServiceStack.Text.JsonSerializer.SerializeToString<T>(t);  
  364.                 return redis.AddItemToSortedSet(key, value);  
  365.             }  
  366.         }  
  367.         /// <summary>  
  368.         ///  添加数据到SortedSet  
  369.         /// </summary>  
  370.         /// <typeparam name="T">类型</typeparam>  
  371.         /// <param name="key">SortedSet key</param>  
  372.         /// <param name="t">对象</param>  
  373.         /// <param name="score">score:排序值。优先按照score从小->大排序,否则按值小到大排序</param>  
  374.         /// <returns>操作是否成功</returns>  
  375.         public static bool SortedSetAdd<T>(string key, T t, double score)  
  376.         {  
  377.             using (IRedisClient redis = Prcm.GetClient())  
  378.             {  
  379.                 string value = ServiceStack.Text.JsonSerializer.SerializeToString<T>(t);  
  380.                 return redis.AddItemToSortedSet(key, value, score);  
  381.             }  
  382.         }  
  383.         /// <summary>  
  384.         /// 移除数据从SortedSet  
  385.         /// </summary>  
  386.         /// <typeparam name="T">类型</typeparam>  
  387.         /// <param name="key">SortedSet key</param>  
  388.         /// <param name="t">对象</param>  
  389.         /// <returns>操作是否成功</returns>  
  390.         public static bool SortedSetRemove<T>(string key, T t)  
  391.         {  
  392.             using (IRedisClient redis = Prcm.GetClient())  
  393.             {  
  394.                 string value = ServiceStack.Text.JsonSerializer.SerializeToString<T>(t);  
  395.                 return redis.RemoveItemFromSortedSet(key, value);  
  396.             }  
  397.         }  
  398.         /// <summary>  
  399.         /// 移除SortedSet中指定下标的项  
  400.         /// </summary>  
  401.         /// <param name="key">SortedSet key</param>  
  402.         /// <param name="minRank">开始下标</param>  
  403.         /// <param name="maxRank">结束下标</param>  
  404.         /// <returns>移除的条数</returns>  
  405.         public static long SortedSetRemove(string key, int minRank, int maxRank)  
  406.         {  
  407.             using (IRedisClient redis = Prcm.GetClient())  
  408.             {  
  409.                 return redis.RemoveRangeFromSortedSet(key, minRank, maxRank);  
  410.             }  
  411.         }  
  412.         /// <summary>  
  413.         /// 获取SortedSet的分页数据  
  414.         /// </summary>  
  415.         /// <typeparam name="T">类型</typeparam>  
  416.         /// <param name="key">SortedSet key</param>  
  417.         /// <param name="pageIndex">页码</param>  
  418.         /// <param name="pageSize">页条数</param>  
  419.         /// <returns>List集合</returns>  
  420.         public static List<T> SortedSetGetList<T>(string key, int pageIndex, int pageSize)  
  421.         {  
  422.             using (IRedisClient redis = Prcm.GetClient())  
  423.             {  
  424.                 var list = redis.GetRangeFromSortedSet(key, (pageIndex - 1) * pageSize, pageIndex * pageSize - 1);  
  425.                 if (list != null && list.Count > 0)  
  426.                 {  
  427.                     List<T> result = new List<T>();  
  428.                     foreach (var item in list)  
  429.                     {  
  430.                         var data = ServiceStack.Text.JsonSerializer.DeserializeFromString<T>(item);  
  431.                         result.Add(data);  
  432.                     }  
  433.                     return result;  
  434.                 }  
  435.             }  
  436.             return null;  
  437.         }  
  438.         /// <summary>  
  439.         /// 获取SortedSet的全部数据  
  440.         /// </summary>  
  441.         /// <typeparam name="T">类型</typeparam>  
  442.         /// <param name="key">SortedSet key</param>  
  443.         /// <returns>List集合</returns>  
  444.         public static List<T> SortedSetGetListALL<T>(string key)  
  445.         {  
  446.             using (IRedisClient redis = Prcm.GetClient())  
  447.             {  
  448.                 var list = redis.GetRangeFromSortedSet(key, 0, 9999999);  
  449.                 if (list != null && list.Count > 0)  
  450.                 {  
  451.                     List<T> result = new List<T>();  
  452.                     foreach (var item in list)  
  453.                     {  
  454.                         var data = ServiceStack.Text.JsonSerializer.DeserializeFromString<T>(item);  
  455.                         result.Add(data);  
  456.                     }  
  457.                     return result;  
  458.                 }  
  459.             }  
  460.             return null;  
  461.         }  
  462.         /// <summary>  
  463.         /// 获取SortedSet的个数  
  464.         /// </summary>  
  465.         /// <param name="key">SortedSet key</param>  
  466.         /// <returns>个数</returns>  
  467.         public static long SortedSetCount(string key)  
  468.         {  
  469.             using (IRedisClient redis = Prcm.GetClient())  
  470.             {  
  471.                 return redis.GetSortedSetCount(key);  
  472.             }  
  473.         }  
  474.         /// <summary>  
  475.         /// 获取指定对象的score值  
  476.         /// </summary>  
  477.         /// <typeparam name="T">类型</typeparam>  
  478.         /// <param name="key">SortedSet key</param>  
  479.         /// <param name="t">对象</param>  
  480.         /// <returns>score值</returns>  
  481.         public static double SortedSetGetItemScore<T>(string key, T t)  
  482.         {  
  483.             using (IRedisClient redis = Prcm.GetClient())  
  484.             {  
  485.                 var data = ServiceStack.Text.JsonSerializer.SerializeToString<T>(t);  
  486.                 return redis.GetItemScoreInSortedSet(key, data);  
  487.             }  
  488.             return 0;  
  489.         }  
  490.         #endregion  
  491.  
  492.         #region Common  
  493.         /// <summary>  
  494.         /// 设置缓存过期  
  495.         /// </summary>  
  496.         /// <param name="key">key</param>  
  497.         /// <param name="datetime">过期时间</param>  
  498.         /// <returns>操作是否成功</returns>  
  499.         public static bool CommonSetExpire(string key, DateTime datetime)  
  500.         {  
  501.             using (IRedisClient redis = Prcm.GetClient())  
  502.             {  
  503.                 return redis.ExpireEntryAt(key, datetime);  
  504.             }  
  505.         }  
  506.         /// <summary>  
  507.         /// 判断某个key是否已经被缓存  
  508.         /// </summary>  
  509.         /// <param name="key">key</param>  
  510.         /// <returns>是否被缓存</returns>  
  511.         public static bool CommonKeyExist(string key)  
  512.         {  
  513.             using (IRedisClient redis = Prcm.GetClient())  
  514.             {  
  515.                 return redis.ContainsKey(key);  
  516.             }  
  517.         }  
  518.         /// <summary>  
  519.         /// 移除指定key的数据  
  520.         /// </summary>  
  521.         /// <param name="key">key</param>  
  522.         /// <returns>操作是否成功</returns>  
  523.         public static bool CommonRemove(string key)  
  524.         {  
  525.             using (IRedisClient redis = Prcm.GetClient())  
  526.             {  
  527.                 return redis.Remove(key);  
  528.             }  
  529.         }  
  530.         #endregion  
  531.     }  
  532. }  

猜你喜欢

转载自blog.csdn.net/qq_30764991/article/details/80384894