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);
            }
    

      

  • 相关阅读:
    Ubuntu下ATI显卡风扇转速调节脚本
    App_GlobalResources和LocalResources文件夹区别
    ubuntu下添加开机启动项
    UBUNTU安装PHP
    ubuntu apache2配置
    在ubuntu 上安装半透明玻璃窗口
    ASP.NET 页面:在此页面动态调用用户控件(.ASCX)
    Ubuntu 安装 LAMP 主机之后运行出现乱码
    Ubuntu下安装LMAP—菜鸟版
    Ubuntu 10.04风扇声音太大
  • 原文地址:https://www.cnblogs.com/jhy55/p/7681626.html
Copyright © 2011-2022 走看看