public class RedisHelper { int Default_Timeout = 600;//默认超时时间(单位秒) private static string address; JsonSerializerSettings jsonConfig = new JsonSerializerSettings() { ReferenceLoopHandling = Newtonsoft.Json.ReferenceLoopHandling.Ignore, NullValueHandling = NullValueHandling.Ignore }; private static ConnectionMultiplexer connectionMultiplexer; IDatabase database; class CacheObject<T> { public int ExpireTime { get; set; } public bool ForceOutofDate { get; set; } public T Value { get; set; } } static RedisHelper() { address = "192.168.17.128:22121"; if (address == null || string.IsNullOrWhiteSpace(address.ToString())) throw new ApplicationException("连接字符串不存在"); var options = ConfigurationOptions.Parse(address); options.Proxy = Proxy.Twemproxy; connectionMultiplexer = ConnectionMultiplexer.Connect(options); } public RedisHelper() { database = connectionMultiplexer.GetDatabase(); } /// <summary> /// 连接超时设置 /// </summary> public int TimeOut { get { return Default_Timeout; } set { Default_Timeout = value; } } public ITransaction BeginTransation() { return database.CreateTransaction(); } public IBatch CreateBatch() { return database.CreateBatch(); } public object Get(string key) { return Get<object>(key); } public T Get<T>(string key) { DateTime begin = DateTime.Now; var cacheValue = database.StringGet(key); DateTime endCache = DateTime.Now; var value = default(T); if (!cacheValue.IsNull) { var cacheObject = JsonConvert.DeserializeObject<CacheObject<T>>(cacheValue, jsonConfig); if (!cacheObject.ForceOutofDate) database.KeyExpire(key, new TimeSpan(0, 0, cacheObject.ExpireTime)); value = cacheObject.Value; } DateTime endJson = DateTime.Now; return value; } public void Insert(string key, object data,bool forceOutofDate=false) { var jsonData = GetJsonData(data, TimeOut, forceOutofDate); database.StringSet(key, jsonData); } public void Insert(string key, object data, int cacheTime) { var timeSpan = TimeSpan.FromSeconds(cacheTime); var jsonData = GetJsonData(data, TimeOut, true); database.StringSet(key, jsonData, timeSpan); } public void Insert(string key, object data, DateTime cacheTime) { var timeSpan = cacheTime - DateTime.Now; var jsonData = GetJsonData(data, TimeOut, true); database.StringSet(key, jsonData, timeSpan); } public void Insert<T>(string key, T data, bool forceOutofDate = false) { var jsonData = GetJsonData<T>(data, TimeOut, forceOutofDate); database.StringSet(key, jsonData); } public void Insert<T>(string key, T data, int cacheTime) { var timeSpan = TimeSpan.FromSeconds(cacheTime); var jsonData = GetJsonData<T>(data, TimeOut, true); database.StringSet(key, jsonData, timeSpan); } public void Insert<T>(string key, T data, DateTime cacheTime) { var timeSpan = cacheTime - DateTime.Now; var jsonData = GetJsonData<T>(data, TimeOut, true); database.StringSet(key, jsonData, timeSpan); } string GetJsonData(object data, int cacheTime, bool forceOutOfDate) { var cacheObject = new CacheObject<object>() { Value = data, ExpireTime = cacheTime, ForceOutofDate = forceOutOfDate }; return JsonConvert.SerializeObject(cacheObject, jsonConfig);//序列化对象 } string GetJsonData<T>(T data, int cacheTime, bool forceOutOfDate) { var cacheObject = new CacheObject<T>() { Value = data, ExpireTime = cacheTime, ForceOutofDate = forceOutOfDate }; return JsonConvert.SerializeObject(cacheObject, jsonConfig);//序列化对象 } /// <summary> /// 删除 /// </summary> /// <param name="key"></param> public void Remove(string key) { database.KeyDelete(key); } /// <summary> /// 判断key是否存在 /// </summary> public bool Exists(string key) { return database.KeyExists(key); } }
原文:https://www.cnblogs.com/dzpblogs/p/10666615.html