zoukankan      html  css  js  c++  java
  • .net core redis使用

    整理下.net core的redis使用  可以分布式

    Nuget安装 StackExchange.Redis

    using System;
    using System.Collections.Generic;
    using Microsoft.Extensions.Logging;
    
    using StackExchange.Redis;
    using Newtonsoft.Json;
    
    namespace WebApplication1
    {
        public class RedisHelperNetCore
        {
            //单例模式
            public static RedisCommon Default { get { return new RedisCommon(); } }
            public static RedisCommon One { get { return new RedisCommon(1, "127.0.0.1:6379"); } }
            public static RedisCommon Two { get { return new RedisCommon(2, "127.0.0.1:6379"); } }
        }
        /// <summary>
        /// Redis操作类
        /// 老版用的是ServiceStack.Redis。
        /// Net Core使用StackExchange.Redis的nuget包
        /// </summary>
        public class RedisCommon
        {
            //public static ILogger Log = UtilLogger<RedisCommon>.Log;//日志记录
            //redis数据库连接字符串
            private string _conn = AppConfigurtaionServices.Configuration["RedisConfig:ReadWriteHosts"] ?? "127.0.0.1:6379";
            private int _db = 0;
            //静态变量 保证各模块使用的是不同实例的相同链接
            private static ConnectionMultiplexer connection;
            public RedisCommon() { }
            /// <summary>
            /// 构造函数
            /// </summary>
            /// <param name="db"></param>
            /// <param name="connectStr"></param>
            public RedisCommon(int db, string connectStr)
            {
                _conn = connectStr;
                _db = db;
            }
            /// <summary>
            /// 缓存数据库,数据库连接
            /// </summary>
            public ConnectionMultiplexer CacheConnection
            {
                get
                {
                    try
                    {
                        if (connection == null || !connection.IsConnected)
                        {
                            connection = new Lazy<ConnectionMultiplexer>(() => ConnectionMultiplexer.Connect(_conn)).Value;
                        }
                    }
                    catch (Exception ex)
                    {
                        //Log.LogError("RedisHelper->CacheConnection 出错
    " + ex.ToString());
                        return null;
                    }
                    return connection;
                }
            }
            /// <summary>
            /// 缓存数据库
            /// </summary>
            public IDatabase CacheRedis => CacheConnection.GetDatabase(_db);
    
            #region --KEY/VALUE存取--
            /// <summary>
            /// 单条存值
            /// </summary>
            /// <param name="key">key</param>
            /// <param name="value">The value.</param>
            /// <returns><c>true</c> if XXXX, <c>false</c> otherwise.</returns>
            public bool StringSet(string key, string value)
            {
                return CacheRedis.StringSet(key, value);
            }
            /// <summary>
            /// 保存单个key value
            /// </summary>
            /// <param name="key">Redis Key</param>
            /// <param name="value">保存的值</param>
            /// <param name="expiry">过期时间</param>
            /// <returns></returns>
            public bool StringSet(string key, string value, TimeSpan? expiry = default(TimeSpan?))
            {
                return CacheRedis.StringSet(key, value, expiry);
            }
            /// <summary>
            /// 保存多个key value
            /// </summary>
            /// <param name="arr">key</param>
            /// <returns></returns>
            public bool StringSet(KeyValuePair<RedisKey, RedisValue>[] arr)
            {
                return CacheRedis.StringSet(arr);
            }
            /// <summary>
            /// 批量存值
            /// </summary>
            /// <param name="keysStr">key</param>
            /// <param name="valuesStr">The value.</param>
            /// <returns><c>true</c> if XXXX, <c>false</c> otherwise.</returns>
            public bool StringSetMany(string[] keysStr, string[] valuesStr)
            {
                var count = keysStr.Length;
                var keyValuePair = new KeyValuePair<RedisKey, RedisValue>[count];
                for (int i = 0; i < count; i++)
                {
                    keyValuePair[i] = new KeyValuePair<RedisKey, RedisValue>(keysStr[i], valuesStr[i]);
                }
    
                return CacheRedis.StringSet(keyValuePair);
            }
    
            /// <summary>
            /// 保存一个对象
            /// </summary>
            /// <typeparam name="T"></typeparam>
            /// <param name="key"></param>
            /// <param name="obj"></param>
            /// <returns></returns>
            public bool SetStringKey<T>(string key, T obj, TimeSpan? expiry = default(TimeSpan?))
            {
                string json = JsonConvert.SerializeObject(obj);
                return CacheRedis.StringSet(key, json, expiry);
            }
            /// <summary>
            /// 追加值
            /// </summary>
            /// <param name="key"></param>
            /// <param name="value"></param>
            public void StringAppend(string key, string value)
            {
                ////追加值,返回追加后长度
                long appendlong = CacheRedis.StringAppend(key, value);
            }
    
            /// <summary>
            /// 获取单个key的值
            /// </summary>
            /// <param name="key">Redis Key</param>
            /// <returns></returns>
            public RedisValue GetStringKey(string key)
            {
                return CacheRedis.StringGet(key);
            }
            /// <summary>
            /// 根据Key获取值
            /// </summary>
            /// <param name="key">键值</param>
            /// <returns>System.String.</returns>
            public string StringGet(string key)
            {
                try
                {
                    return CacheRedis.StringGet(key);
                }
                catch (Exception ex)
                {
                    //Log.LogError("RedisHelper->StringGet 出错
    " + ex.ToString());
                    return null;
                }
            }
    
            /// <summary>
            /// 获取多个Key
            /// </summary>
            /// <param name="listKey">Redis Key集合</param>
            /// <returns></returns>
            public RedisValue[] GetStringKey(List<RedisKey> listKey)
            {
                return CacheRedis.StringGet(listKey.ToArray());
            }
            /// <summary>
            /// 批量获取值
            /// </summary>
            public string[] StringGetMany(string[] keyStrs)
            {
                var count = keyStrs.Length;
                var keys = new RedisKey[count];
                var addrs = new string[count];
    
                for (var i = 0; i < count; i++)
                {
                    keys[i] = keyStrs[i];
                }
                try
                {
    
                    var values = CacheRedis.StringGet(keys);
                    for (var i = 0; i < values.Length; i++)
                    {
                        addrs[i] = values[i];
                    }
                    return addrs;
                }
                catch (Exception ex)
                {
                    //Log.LogError("RedisHelper->StringGetMany 出错
    " + ex.ToString());
                    return null;
                }
            }
            /// <summary>
            /// 获取一个key的对象
            /// </summary>
            /// <typeparam name="T"></typeparam>
            /// <param name="key"></param>
            /// <returns></returns>
            public T GetStringKey<T>(string key)
            {
                return JsonConvert.DeserializeObject<T>(CacheRedis.StringGet(key));
            }
    
            #endregion
    
            #region --删除设置过期--
            /// <summary>
            /// 删除单个key
            /// </summary>
            /// <param name="key">redis key</param>
            /// <returns>是否删除成功</returns>
            public bool KeyDelete(string key)
            {
                return CacheRedis.KeyDelete(key);
            }
            /// <summary>
            /// 删除多个key
            /// </summary>
            /// <param name="keys">rediskey</param>
            /// <returns>成功删除的个数</returns>
            public long KeyDelete(RedisKey[] keys)
            {
                return CacheRedis.KeyDelete(keys);
            }
            /// <summary>
            /// 判断key是否存储
            /// </summary>
            /// <param name="key">redis key</param>
            /// <returns></returns>
            public bool KeyExists(string key)
            {
                return CacheRedis.KeyExists(key);
            }
            /// <summary>
            /// 重新命名key
            /// </summary>
            /// <param name="key">就的redis key</param>
            /// <param name="newKey">新的redis key</param>
            /// <returns></returns>
            public bool KeyRename(string key, string newKey)
            {
                return CacheRedis.KeyRename(key, newKey);
            }
            /// <summary>
            /// 删除hasekey
            /// </summary>
            /// <param name="key"></param>
            /// <param name="hashField"></param>
            /// <returns></returns>
            public bool HaseDelete(RedisKey key, RedisValue hashField)
            {
                return CacheRedis.HashDelete(key, hashField);
            }
            /// <summary>
            /// 移除hash中的某值
            /// </summary>
            /// <typeparam name="T"></typeparam>
            /// <param name="key"></param>
            /// <param name="dataKey"></param>
            /// <returns></returns>
            public bool HashRemove(string key, string dataKey)
            {
                return CacheRedis.HashDelete(key, dataKey);
            }
            /// <summary>
            /// 设置缓存过期
            /// </summary>
            /// <param name="key"></param>
            /// <param name="datetime"></param>
            public void SetExpire(string key, DateTime datetime)
            {
                CacheRedis.KeyExpire(key, datetime);
            }
            #endregion
    
        }
    }
    View Code
    appsetting.json配置
    //redis分布式缓存
      "RedisConfig": {
        //是否打开缓存1是0否
        "IsOpenCache": "0",
        "ReadWriteHosts": "127.0.0.1:6379,password=123456",
        "ReadOnlyHosts": "127.0.0.1:6379,password=123456"
      }
    View Code

    测试 

    public IActionResult Index()
    {
    #region --测试redis--
    var a=RedisHelperNetCore.Default.StringSet("redis", "redis" + DateTime.Now, TimeSpan.FromSeconds(1000000));
    var b = RedisHelperNetCore.Default.StringGet("redis");
    //var c= RedisHelper.Default.KeyDelete("redis");
    #endregion
    return View();
    }
  • 相关阅读:
    分表分库-------shading jdbc使用
    字符串之特殊符号处理
    【汇编程序】编程将100到200中的奇数求和,结果送到SUM字单元
    【汇编程序】从键盘输入一个大写字母,将其转换成小写字母
    【汇编程序】统计非数字的个数
    【读书笔记】看过的书籍列表整理
    【微机原理】数字电路器件—门 与门 或门 非门电路及实例
    【c语言】递归题
    【汇编程序】BUF为首址的100个字节单元用原码表示的有符号数依次编程用补码表示的有符号数
    【汇编程序】编写一个完整的程序 将这3个数的最大者存放到MAX单元
  • 原文地址:https://www.cnblogs.com/LiChen19951127/p/10478153.html
Copyright © 2011-2022 走看看