RedisHelper.cs 3.47 KB
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using StackExchange.Redis;

namespace Quiz.SiteBase
{
    public class RedisHelper
    {
        private readonly static string REDIS_CONN = "121.40.109.21:6379,password=123456";
        private readonly static string REDIS_IP = "121.40.109.21";
        private readonly static int REDIS_PORT = 6379;

        private ConnectionMultiplexer redis = null;
        private IDatabase database = null;
        private IServer server = null;
        private int mydb = 0;
        public RedisHelper(int db)
        {
            mydb = db;
            if (redis == null)
            {
                redis = ConnectionMultiplexer.Connect(REDIS_CONN);
                database = redis.GetDatabase(mydb);
                server = redis.GetServer(REDIS_IP, REDIS_PORT);
                redis.ErrorMessage += Redis_ErrorMessage;
            }
        }
        /// <summary>
        /// 异常记录
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private static void Redis_ErrorMessage(object sender, RedisErrorEventArgs e)
        {
            //LogHelper.WriteLog("Redis", new Exception(e.Message));
        }

        /// <summary>
        /// 通过key获取value
        /// </summary>
        /// <param name="key"></param>
        /// <returns></returns>
        public string StringGet(string key)
        {
            return database.StringGet(key);
        }

        /// <summary>
        /// 新增key value
        /// </summary>
        /// <param name="key"></param>
        /// <param name="val"></param>
        /// <param name="exp"></param>
        /// <returns></returns>
        public bool StringSet(string key, string val, TimeSpan? exp = default(TimeSpan?))
        {
            return database.StringSet(key, val, exp);
        }

        /// <summary>
        /// 新增key value
        /// </summary>
        /// <param name="key"></param>
        /// <param name="val"></param>
        /// <param name="exp"></param>
        /// <returns></returns>
        public bool ObjectSet(string key, object val, TimeSpan? exp = default(TimeSpan?))
        {
            string json = Newtonsoft.Json.JsonConvert.SerializeObject(val);
            return database.StringSet(key, json, exp);
        }

        /// <summary>
        /// 获取key
        /// </summary>
        /// <param name="pattern"></param>
        /// <returns></returns>
        public IEnumerable<RedisKey> LikeKeys(string pattern = "*")
        {
            return server.Keys(database: mydb, pattern: pattern);
        }

        /// <summary>
        /// 查询
        /// </summary>
        /// <param name="pattern"></param>
        /// <returns></returns>
        public Dictionary<string, string> GetLikeKeyValue(string pattern = "*")
        {
            IEnumerable<RedisKey> list = LikeKeys(pattern);
            Dictionary<string, string> dic = new Dictionary<string, string>();
            if (list != null && list.Count() > 0)
            {
                foreach (var item in list)
                {
                    dic.Add(item, StringGet(item));
                }
            }
            return dic;
        }

        /// <summary>
        /// 删除key
        /// </summary>
        /// <param name="key"></param>
        /// <returns></returns>
        public bool KeyDelete(string key)
        {
            return database.KeyDelete(key);
        }

    }
}