| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161 | 
							- using System;
 
- using System.Collections.Generic;
 
- using System.Threading.Tasks;
 
- using Newtonsoft.Json;
 
- using StackExchange.Redis;
 
- using YiSha.Cache.Interface;
 
- using YiSha.Util;
 
- namespace YiSha.RedisCache
 
- {
 
-     public class RedisCacheImp : ICache
 
-     {
 
-         private IDatabase cache;
 
-         private ConnectionMultiplexer connection;
 
-         public RedisCacheImp()
 
-         {
 
-             connection = ConnectionMultiplexer.Connect(GlobalContext.SystemConfig.RedisConnectionString);
 
-             cache = connection.GetDatabase();
 
-         }
 
-         public bool SetCache<T>(string key, T value, DateTime? expireTime = null)
 
-         {
 
-             try
 
-             {
 
-                 var jsonOption = new JsonSerializerSettings()
 
-                 {
 
-                     ReferenceLoopHandling = ReferenceLoopHandling.Ignore
 
-                 };
 
-                 string strValue = JsonConvert.SerializeObject(value, jsonOption);
 
-                 if (string.IsNullOrEmpty(strValue))
 
-                 {
 
-                     return false;
 
-                 }
 
-                 if (expireTime == null)
 
-                 {
 
-                     return cache.StringSet(key, strValue);
 
-                 }
 
-                 else
 
-                 {
 
-                     return cache.StringSet(key, strValue, (expireTime.Value - DateTime.Now));
 
-                 }
 
-             }
 
-             catch (Exception ex)
 
-             {
 
-                 LogHelper.Error(ex);
 
-             }
 
-             return false;
 
-         }
 
-         public bool RemoveCache(string key)
 
-         {
 
-             return cache.KeyDelete(key);
 
-         }
 
-         public T GetCache<T>(string key)
 
-         {
 
-             var t = default(T);
 
-             try
 
-             {
 
-                 var value = cache.StringGet(key);
 
-                 if (string.IsNullOrEmpty(value))
 
-                 {
 
-                     return t;
 
-                 }
 
-                 t = JsonConvert.DeserializeObject<T>(value);
 
-             }
 
-             catch (Exception ex)
 
-             {
 
-                 LogHelper.Error(ex);
 
-             }
 
-             return t;
 
-         }
 
-         #region Hash
 
-         public int SetHashFieldCache<T>(string key, string fieldKey, T fieldValue)
 
-         {
 
-             return SetHashFieldCache<T>(key, new Dictionary<string, T> { { fieldKey, fieldValue } });
 
-         }
 
-         public int SetHashFieldCache<T>(string key, Dictionary<string, T> dict)
 
-         {
 
-             int count = 0;
 
-             var jsonOption = new JsonSerializerSettings()
 
-             {
 
-                 ReferenceLoopHandling = ReferenceLoopHandling.Ignore
 
-             };
 
-             foreach (string fieldKey in dict.Keys)
 
-             {
 
-                 string fieldValue = JsonConvert.SerializeObject(dict[fieldKey], jsonOption);
 
-                 count += cache.HashSet(key, fieldKey, fieldValue) ? 1 : 0;
 
-             }
 
-             return count;
 
-         }
 
-         public T GetHashFieldCache<T>(string key, string fieldKey)
 
-         {
 
-             var dict = GetHashFieldCache<T>(key, new Dictionary<string, T> { { fieldKey, default(T) } });
 
-             return dict[fieldKey];
 
-         }
 
-         public Dictionary<string, T> GetHashFieldCache<T>(string key, Dictionary<string, T> dict)
 
-         {
 
-             foreach (string fieldKey in dict.Keys)
 
-             {
 
-                 string fieldValue = cache.HashGet(key, fieldKey);
 
-                 dict[fieldKey] = JsonConvert.DeserializeObject<T>(fieldValue);
 
-             }
 
-             return dict;
 
-         }
 
-         public Dictionary<string, T> GetHashCache<T>(string key)
 
-         {
 
-             Dictionary<string, T> dict = new Dictionary<string, T>();
 
-             var hashFields = cache.HashGetAll(key);
 
-             foreach (HashEntry field in hashFields)
 
-             {
 
-                 dict[field.Name] = JsonConvert.DeserializeObject<T>(field.Value);
 
-             }
 
-             return dict;
 
-         }
 
-         public List<T> GetHashToListCache<T>(string key)
 
-         {
 
-             List<T> list = new List<T>();
 
-             var hashFields = cache.HashGetAll(key);
 
-             foreach (HashEntry field in hashFields)
 
-             {
 
-                 list.Add(JsonConvert.DeserializeObject<T>(field.Value));
 
-             }
 
-             return list;
 
-         }
 
-         public bool RemoveHashFieldCache(string key, string fieldKey)
 
-         {
 
-             Dictionary<string, bool> dict = new Dictionary<string, bool> { { fieldKey, false } };
 
-             dict = RemoveHashFieldCache(key, dict);
 
-             return dict[fieldKey];
 
-         }
 
-         public Dictionary<string, bool> RemoveHashFieldCache(string key, Dictionary<string, bool> dict)
 
-         {
 
-             foreach (string fieldKey in dict.Keys)
 
-             {
 
-                 dict[fieldKey] = cache.HashDelete(key, fieldKey);
 
-             }
 
-             return dict;
 
-         }
 
-         #endregion
 
-         public void Dispose()
 
-         {
 
-             if (connection != null)
 
-             {
 
-                 connection.Close();
 
-             }
 
-             GC.SuppressFinalize(this);
 
-         }
 
-     }
 
- }
 
 
  |