zoukankan      html  css  js  c++  java
  • redis的常用公共方法

    2018-06-27 更新了redis新的 方法类 https://www.cnblogs.com/jhy55/p/9232623.html

    更新内容:添加连接池,高并发线程错误 

    实用redis已经有一段时间了,今天刚好有空记录一下所用到的方法,欢迎指正

    首先我封装了一些字段信息

        #region 字段
            /// <summary>
            /// Redis服务器地址
            /// </summary>
            private static string _host;
    
            /// <summary>
            /// 端口
            /// </summary>
            private static int _port;
    
            /// <summary>
            /// 密码
            /// </summary>
            private static string _password;
    
            /// <summary>
            /// 过期时间
            /// </summary>
            private static DateTime _timeout;
    
    
    
            #endregion
    
            #region 属性
            /// <summary>
            /// Redis服务器地址
            /// </summary>
            public static string Host
            {
                get { return _host = ConfigurationManager.AppSettings["RedisIp"]; }
            }
    
            /// <summary>
            /// 端口
            /// </summary>
            public static int Port
            {
                get { return _port = Int32.Parse(ConfigurationManager.AppSettings["RedisPort"]); }
            }
            /// <summary>
            /// 密码
            /// </summary>
            public static string Password
            {
                get { return _password = ConfigurationManager.AppSettings["PassWord"]; }
            }
    
       
            public static int TimeOutDay = Int32.Parse(ConfigurationManager.AppSettings["DayOut"]);
    
    
    
            /// <summary>
            /// 过期时间
            /// </summary>
            public static DateTime Timeout
            {
                get { return _timeout = DateTime.Now.AddDays(TimeOutDay); }
            }
            #endregion
    

      

     private static object _locker = new object();
    
    
            private static RedisClient redis
            {
                get
                {
                    RedisClient redis = new RedisClient();
                    if (!IsLock)
                        redis = new RedisClient(Host, Port, Password, ChangeDb);
                    redis.ChangeDb(ChangeDb);
                    return redis;
                }
            }
    
    
            /// <summary>
            /// 获得Redis对象
            /// </summary>
            public static RedisClient Redis
            {
                get { return redis; }
            }
    
            /// <summary>
            /// 设置缓存
            /// </summary>
            /// <typeparam name="T">类型</typeparam>
            /// <param name="key"></param>
            /// <param name="t"></param>
            /// <param name="timeOut">过期时间</param>
            /// <returns></returns>
            public static bool Set<T>(string key, T t)
            {
                if (IsLock) return false;
                lock (_locker)
                {
                    return redis.Set(key, t, Timeout);
                }
            }
    
    
            /// <summary>
            /// 设置缓存
            /// </summary>
            /// <typeparam name="T">类型</typeparam>
            /// <param name="key"></param>
            /// <param name="t"></param>
            /// <param name="timeOut">过期时间</param>
            /// <returns></returns>
            public static bool Set<T>(string key, T t, DateTime time)
            {
                if (IsLock) return false;
                lock (_locker)
                {
                    return redis.Set(key, t, time);
                }
            }
            /// <summary>
            /// 获取缓存
            /// </summary>
            /// <typeparam name="T"></typeparam>
            /// <param name="key"></param>
            /// <returns></returns>
            public static T Get<T>(string key)
            {
                if (IsLock) return default(T);
                lock (_locker)
                {
                    if (redis.Exists(key) > 0)
                        return redis.Get<T>(key);
                    else
                        return default(T);
                }
            }
    
            /// <summary>
            /// 判断是否存在某个key
            /// </summary>
            /// <param name="key"></param>
            /// <returns></returns>
            public static bool IsExist(string key)
            {
                if (IsLock) return false;
    
                byte[] buffer = redis.Get(key);
                if (buffer.Length > 0)
                    return true;
                else
                    return false;
            }
    
            /// <summary>
            /// 获取Value的byte的长度
            /// </summary>
            /// <param name="key"></param>
            /// <returns></returns>
            public static int GetValueLength(string key)
            {
                if (IsLock) return 0;
    
                return redis.Get(key).Length;
            }
    
            /// <summary>
            /// 移除指定的Key
            /// </summary>
            /// <param name="key"></param>
            /// <returns></returns>
            public static bool Remove(string key)
            {
                if (IsLock) return false;
    
                lock (_locker)
                {
                    return redis.Remove(key);
                }
            }
    
            /// <summary>
            /// 累加(专用的哦)
            /// </summary>
            /// <param name="s"></param>
            /// <returns></returns>
            public static string Append(string sKey, string s)
            {
                byte[] t = Encoding.Default.GetBytes(s);
                t = Encoding.Default.GetBytes(Convert.ToBase64String(t) + "^");
                return redis.Append(sKey, t).ToString();
            }


      

         /// <summary>
            /// 从Redis中读取记录列表
            /// </summary>
            /// <typeparam name="T">数据结构类型</typeparam>
            /// <param name="sKey">关键字</param>
            /// <returns></returns>
            public static List<T> ReaderEnqueueList<T>(string sKey)
            {
                var OrderStepLogList = Soholife.Common.RedisUtil.Redis.As<T>();
                var fromList = OrderStepLogList.Lists[sKey];
                List<T> oList = OrderStepLogList.GetAllItemsFromList(fromList);
                if (oList != null)
                {
                    OrderStepLogList.RemoveAllFromList(fromList);
                }
                return oList;
            }
    
            /// <summary>
            /// 加入具有数据结构的消息队列中
            /// </summary>
            /// <typeparam name="T">数据结构类型</typeparam>
            /// <param name="t">数据对象</param>
            /// <param name="sKey">关键字</param>
            public static void AddEnqueue<T>(T t, string sKey)
            {
                var OrderStepLogList = Soholife.Common.RedisUtil.Redis.As<T>();
                //加入具有数据结构的消息队列中
                OrderStepLogList.EnqueueItemOnList(OrderStepLogList.Lists[sKey], t);
            }
    

      

  • 相关阅读:
    微信小程序学习随笔
    SqlServer索引假脱机的解决
    web服务器出现大量CLOSE_WAIT连接的前因后果
    SqlServer和mysql字段拼接方法
    使用beego创建员工加班调休系统
    在c#程序中初步使用redis
    使用golang实现批量发送面试邀请邮件
    记c# rabbitmq的使用
    项目中使用mongodb的尝试
    手机集成支付宝支付功能的注意事项
  • 原文地址:https://www.cnblogs.com/jhy55/p/7681626.html
Copyright © 2011-2022 走看看