zoukankan      html  css  js  c++  java
  • StackExchange.Redis 封装类

    using StackExchange.Redis;
    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Configuration;
    using Newtonsoft.Json;
    
    namespace Services
    {
        public class CacheService
        {
            private static CacheService instance = new CacheService();
            private static Logger logger = LogManager.GetCurrentClassLogger();
    
            int Default_Timeout = 20;//默认超时时间(单位秒)
            ConnectionMultiplexer redisConnection;
            IDatabase cache;
    
            /// <summary>
            /// 连接超时设置
            /// </summary>
            public int TimeOut
            {
                get
                {
                    return Default_Timeout;
                }
                set
                {
                    Default_Timeout = value;
                }
            }
            /// <summary>
            /// 构造函数
            /// </summary>
            private CacheService()
            {
                //redisConnection = ConnectionMultiplexer.Connect(ConfigurationManager.ConnectionStrings["RedisConnection"].ConnectionString);
                redisConnection = ConnectionMultiplexer.Connect(AppConfig.connectClientRedis);
    
    
                #region 注册事件
                //注册如下事件
                redisConnection.ConnectionFailed += MuxerConnectionFailed;
                redisConnection.ConnectionRestored += MuxerConnectionRestored;
                redisConnection.ErrorMessage += MuxerErrorMessage;
                redisConnection.ConfigurationChanged += MuxerConfigurationChanged;
                redisConnection.HashSlotMoved += MuxerHashSlotMoved;
                redisConnection.InternalError += MuxerInternalError;
                #endregion
    
                cache = redisConnection.GetDatabase();
    
            }
            /// <summary>
            /// 实例化
            /// </summary>
            /// <returns></returns>
            public static CacheService GetInstance()
            {
                return instance;
            }
            /// <summary>
            /// 保存一个对象
            /// </summary>
            /// <typeparam name="T">泛型对象</typeparam>
            /// <param name="key">key</param>
            /// <param name="obj">对象</param>
            /// <returns></returns>
            public bool Set<T>(string key, T obj)
            {
                try
                {
                    // var timeSpan = TimeSpan.FromSeconds(TimeOut);
                    var json = ConvertJson(obj);
                    return cache.StringSet(key, json);
                }
                catch (Exception ex)
                {
                    logger.Error("=========== Class:CacheService method:Set ===========");
                    logger.Error("=========== Key:" + key + "   value:" + ConvertJson(obj) + "===========");
                    logger.Error(ex);
                }
                return false;
    
            }
            /// <summary>
            /// 获取一个key的对象
            /// </summary>
            /// <typeparam name="T"></typeparam>
            /// <param name="key"></param>
            /// <returns></returns>
            public T Get<T>(string key)
            {
                RedisValue values = cache.StringGet(key);
                return ConvertObj<T>(values);
            }
            public void Batch(IEnumerable<KeyValuePair<string, string>> keyValuePairs)
            {
                var batch = cache.CreateBatch();
                foreach (var k in keyValuePairs)
                {
                    //var json = ConvertJson(k.Value);
                    batch.StringSetAsync(k.Key, k.Value);
                    //batch.SetAddAsync(k.Key, k.Value);
                }
                batch.Execute();
            }
            #region JSON,T 相互转换
            private string ConvertJson<T>(T value)
            {
                string result = value is string ? value.ToString() : JsonConvert.SerializeObject(value);
                return result;
            }
            private T ConvertObj<T>(RedisValue value)
            {
                if (value.IsNull)
                {
                    return default(T);
                }
                return JsonConvert.DeserializeObject<T>(value);
            }
            #endregion
            #region 事件
    
            /// <summary>
            /// 配置更改时
            /// </summary>
            /// <param name="sender"></param>
            /// <param name="e"></param>
            private static void MuxerConfigurationChanged(object sender, EndPointEventArgs e)
            {
                logger.Info("Configuration changed: " + e.EndPoint);
            }
    
            /// <summary>
            /// 发生错误时
            /// </summary>
            /// <param name="sender"></param>
            /// <param name="e"></param>
            private static void MuxerErrorMessage(object sender, RedisErrorEventArgs e)
            {
                logger.Error("ErrorMessage: " + e.Message);
            }
    
            /// <summary>
            /// 重新建立连接之前的错误
            /// </summary>
            /// <param name="sender"></param>
            /// <param name="e"></param>
            private static void MuxerConnectionRestored(object sender, ConnectionFailedEventArgs e)
            {
                logger.Error("ConnectionRestored: " + e.EndPoint);
            }
    
            /// <summary>
            /// 连接失败 , 如果重新连接成功你将不会收到这个通知
            /// </summary>
            /// <param name="sender"></param>
            /// <param name="e"></param>
            private static void MuxerConnectionFailed(object sender, ConnectionFailedEventArgs e)
            {
                logger.Error("重新连接:Endpoint failed: " + e.EndPoint + ", " + e.FailureType + (e.Exception == null ? "" : (", " + e.Exception.Message)));
            }
    
            /// <summary>
            /// 更改集群
            /// </summary>
            /// <param name="sender"></param>
            /// <param name="e"></param>
            private static void MuxerHashSlotMoved(object sender, HashSlotMovedEventArgs e)
            {
                logger.Info("HashSlotMoved:NewEndPoint" + e.NewEndPoint + ", OldEndPoint" + e.OldEndPoint);
            }
    
            /// <summary>
            /// redis类库错误
            /// </summary>
            /// <param name="sender"></param>
            /// <param name="e"></param>
            private static void MuxerInternalError(object sender, InternalErrorEventArgs e)
            {
                logger.Error("InternalError:Message" + e.Exception.Message);
            }
    
            #endregion 事件
        }
    }
  • 相关阅读:
    发布google在线翻译程序(附源码)
    基于MVP架构设计ASP.Net的应用研究
    发布最新C#3.5开发的ReSharper4.0 for VS2005/2008 注册机
    基于元数据驱动模型架构在ASP.Net的应用研究
    Silverlight整合Asp.net AjAX的技术应用
    在WCF中的异常处理方法
    Windows Server 2008 的十四大最新功能特性技术总结
    微软Asp.Net架构与项目团队管理建设模型分析
    在Biztalk应用中调用程序集的方法
    Visual Studio 2008和ASP.NET 3.5的最新技术探索
  • 原文地址:https://www.cnblogs.com/cicada/p/10868249.html
Copyright © 2011-2022 走看看