| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306 | 
							- using Common;
 
- using Newtonsoft.Json;
 
- using StackExchange.Redis;
 
- using System;
 
- using System.Collections.Generic;
 
- using System.Linq;
 
- using System.Net;
 
- using System.Threading;
 
- namespace KC.Cache.Redis
 
- {
 
-     public class RedisHelper
 
-     {
 
-         #region 属性
 
-         /// <summary>
 
-         /// 数据库编号
 
-         /// </summary>
 
-         private int DbNum { get; }
 
-         /// <summary>
 
-         /// 连接
 
-         /// </summary>
 
-         private readonly ConnectionMultiplexer _conn;
 
-         #endregion
 
-         #region 构造函数
 
-         /// <summary>
 
-         /// 构造函数
 
-         /// </summary>
 
-         /// <param name="dbNum">数据库编号</param>
 
-         /// <param name="readWriteHosts">链接地址</param>
 
-         public RedisHelper()
 
-         {
 
-             this.DbNum = ConfigHelper.GetValue("RedisDbNum").TryToInt32();
 
-             string readWriteHosts = ConfigHelper.GetValue("RedisExchangeHosts");
 
-             this._conn = ConnectionMultiplexer.Connect(readWriteHosts);
 
-         }
 
-         #endregion 构造函数
 
-         #region 方法
 
-         /// <summary>
 
-         /// 单个string值存入
 
-         /// </summary>
 
-         /// <param name="key"></param>
 
-         /// <param name="value"></param>
 
-         /// <param name="expiry"></param>
 
-         /// <returns></returns>
 
-         public bool StringSet(string key, string value, TimeSpan? expiry = default(TimeSpan?))
 
-         {
 
-             return Do(db => db.StringSet(key, value, expiry));
 
-         }
 
-         /// <summary>
 
-         /// 单个string值存入
 
-         /// </summary>
 
-         /// <param name="key"></param>
 
-         /// <param name="value"></param>
 
-         /// <param name="expiry"></param>
 
-         /// <returns></returns>
 
-         public bool StringSet<T>(string key, T value, TimeSpan? expiry = default(TimeSpan?))
 
-         {
 
-             return Do(db => db.StringSet(key, ConvertJson(value), expiry));
 
-         }
 
-         /// <summary>
 
-         /// 对象存储
 
-         /// </summary>
 
-         /// <param name="key"></param>
 
-         /// <param name="value"></param>
 
-         /// <param name="expiry"></param>
 
-         /// <returns></returns>
 
-         public void ListSet<T>(string key, T value)
 
-         {
 
-             Do(db => db.ListRightPush(key, value.TryToJson()));
 
-         }
 
-         /// <summary>
 
-         /// 删除单个key
 
-         /// </summary>
 
-         /// <param name="key">redis key</param>
 
-         /// <returns>是否删除成功</returns>
 
-         public bool KeyDelete(string key)
 
-         {
 
-             return Do(db => db.KeyDelete(key));
 
-         }
 
-         /// <summary>
 
-         /// 获取单个key的值
 
-         /// </summary>
 
-         /// <param name="key">Redis Key</param>
 
-         /// <returns></returns>
 
-         public string StringGet(string key)
 
-         {
 
-             return Do(db => db.StringGet(key));
 
-         }
 
-         /// <summary>
 
-         /// 获取指定key的List
 
-         /// </summary>
 
-         /// <param name="key"></param>
 
-         /// <returns></returns>
 
-         public List<T> ListGet<T>(string key)
 
-         {
 
-             return Do(redis =>
 
-             {
 
-                 try
 
-                 {
 
-                     var values = redis.ListRange(key);
 
-                     return ConvetList<T>(values);
 
-                 }
 
-                 catch (Exception)
 
-                 {
 
-                     return new List<T>();
 
-                 }
 
-             });
 
-         }
 
-         /// <summary>
 
-         /// 获取所有key
 
-         /// </summary>
 
-         /// <returns></returns>
 
-         public List<string> GetAllKeys()
 
-         {
 
-             var res = Do(db =>
 
-             {
 
-                 EndPoint[] endpoints = _conn.GetEndPoints();
 
-                 List<string> keyList = new List<string>();
 
-                 foreach (EndPoint ep in endpoints)
 
-                 {
 
-                     var server = _conn.GetServer(ep);
 
-                     var keys = server.Keys(DbNum, "*");
 
-                     foreach (var item in keys)
 
-                     {
 
-                         keyList.Add((string)item);
 
-                     }
 
-                 };
 
-                 return keyList;
 
-             });
 
-             return res;
 
-         }
 
-         /// <summary>
 
-         /// 获取指定key的object
 
-         /// </summary>
 
-         /// <param name="key"></param>
 
-         /// <returns></returns>
 
-         public T ListRangeObj<T>(string key)
 
-         {;
 
-             return Do(redis =>
 
-             {
 
-                 try
 
-                 {
 
-                     var values = redis.ListRange(key);
 
-                     var content = values.Count() > 0 ? values[0] : new RedisValue();
 
-                     return ConvertObj<T>(content);
 
-                 }
 
-                 catch (Exception)
 
-                 {
 
-                     Thread.Sleep(1000);
 
-                     var values = redis.ListRange(key);
 
-                     var content = values.Count() > 0 ? values[0] : new RedisValue();
 
-                     return ConvertObj<T>(content);
 
-                 }
 
-             });
 
-         }
 
-         /// <summary>
 
-         /// 判断key是否存储
 
-         /// </summary>
 
-         /// <param name="key">redis key</param>
 
-         /// <returns></returns>
 
-         public bool KeyExists(string key)
 
-         {
 
-             return Do(db => db.KeyExists(key));
 
-         }
 
-         /// <summary>
 
-         /// 执行操作
 
-         /// </summary>
 
-         /// <typeparam name="T"></typeparam>
 
-         /// <param name="func"></param>
 
-         /// <returns></returns>
 
-         private T Do<T>(Func<IDatabase, T> func)
 
-         {
 
-             var database = _conn.GetDatabase(DbNum);
 
-             return func(database);
 
-         }
 
-         /// <summary>
 
-         /// 设置Key的时间
 
-         /// </summary>
 
-         /// <param name="key">redis key</param>
 
-         /// <param name="expiry"></param>
 
-         /// <returns></returns>
 
-         public bool KeyExpire(string key, TimeSpan? expiry = default(TimeSpan?))
 
-         {
 
-             return Do(db => db.KeyExpire(key, expiry));
 
-         }
 
-         /// <summary>
 
-         /// 删除多个key
 
-         /// </summary>
 
-         /// <param name="keys">rediskey</param>
 
-         /// <returns>成功删除的个数</returns>
 
-         public long KeyDelete(List<string> keys)
 
-         {
 
-             return Do(db => db.KeyDelete(ConvertRedisKeys(keys)));
 
-         }
 
-         #endregion
 
-         #region 转换
 
-         /// <summary>
 
-         /// 转换成集合
 
-         /// </summary>
 
-         /// <typeparam name="T"></typeparam>
 
-         /// <param name="values"></param>
 
-         /// <returns></returns>
 
-         private List<T> ConvetList<T>(RedisValue[] values)
 
-         {
 
-             List<T> result = new List<T>();
 
-             //try
 
-             //{
 
-             //    //一个Key下面存了多个相同实体
 
-             //    foreach (RedisValue value in values)
 
-             //    {
 
-             //        var model = ConvertObj<T>(value);
 
-             //        result.Add(model);
 
-             //    }
 
-             //}
 
-             //catch (Exception e)
 
-             //{
 
-             //一个Key下面存的是一个集合
 
-             foreach (RedisValue value in values)
 
-             {
 
-                 List<T> temp = JsonConvert.DeserializeObject<List<T>>(value);
 
-                 result = result.Concat(temp).ToList();
 
-             }
 
-             // }
 
-             return result;
 
-         }
 
-         /// <summary>
 
-         /// 转换成Json字符串
 
-         /// </summary>
 
-         /// <typeparam name="T"></typeparam>
 
-         /// <param name="value"></param>
 
-         /// <returns></returns>
 
-         private string ConvertJson<T>(T value)
 
-         {
 
-             string result = value is string ? value.ToString() : JsonConvert.SerializeObject(value);
 
-             return result;
 
-         }
 
-         /// <summary>
 
-         /// 转换成对象
 
-         /// </summary>
 
-         /// <typeparam name="T"></typeparam>
 
-         /// <param name="value"></param>
 
-         /// <returns></returns>
 
-         private T ConvertObj<T>(RedisValue value)
 
-         {
 
-             if (!value.IsNullOrEmpty)
 
-             {
 
-                 var val = value.ToString();
 
-                 try
 
-                 {
 
-                     if (!val.IsEmpty() && val.IsJson())
 
-                         return JsonConvert.DeserializeObject<T>(val);
 
-                     return default(T);
 
-                 }
 
-                 catch (Exception ex)
 
-                 {
 
-                     throw;
 
-                 }
 
-             }
 
-             return default(T);
 
-         }
 
-         /// <summary>
 
-         /// 批量转换成RedisKey
 
-         /// </summary>
 
-         /// <param name="redisKeys"></param>
 
-         /// <returns></returns>
 
-         private RedisKey[] ConvertRedisKeys(List<string> redisKeys)
 
-         {
 
-             return redisKeys.Select(redisKey => (RedisKey)redisKey).ToArray();
 
-         }
 
-         #endregion
 
-     }
 
- }
 
 
  |