C# 使用stackexchange.redis操作redis

该文章展示了一个使用StackExchange.Redis库在C#中操作Redis缓存的代码示例,包括字符串、哈希、集合和有序集合的基本CRUD操作。通过RedisHelper类,可以方便地进行数据的存取和删除,支持设置过期时间。
摘要由CSDN通过智能技术生成

我们使用stackexchange.redis,主要原因是它开源免费

1.引入nuget包 

 2.工具类

 /// <summary>
    /// Redis基础操作帮助类
    /// </summary>
    public class RedisHelper
    {
        /// <summary>
        /// 初始化链接
        /// </summary>
        private static readonly ConnectionMultiplexer _con = ConnectionMultiplexer.Connect("127.0.0.1:6379");//此处写redis的账号和密码;



        #region String类型
        /// <summary>
        /// 查
        /// </summary>
        /// <param name="DataOrder">db的序号</param>
        /// <param name="Key">Key名</param> 
        public static string GetStringValue_Redis(int DataOrder, string Key)
        {
            IDatabase db = _con.GetDatabase(DataOrder);  // GetDatabase()括号中如果不填写数字就默认是0
            return db.StringGet(Key);  // 得到缓存
        }

        /// <summary>
        ///  增
        /// </summary>
        /// <param name="DataOrder">db的序号</param>
        /// <param name="Key">Key名</param>
        /// <param name="Value">Key值</param>
        /// <param name="expiry">过期时间</param>
        /// <returns></returns>
        public static async Task<bool> AddStringValue_Redis(int DataOrder, string Key, string Value, TimeSpan? expiry = null)
        {
            IDatabase db = _con.GetDatabase(DataOrder);  // GetDatabase()括号中如果不填写数字就默认是0
            if (expiry != null)
            {
                return await db.StringSetAsync(Key, Value, expiry);  // string类型存入缓存
            }
            else
            {
                return await db.StringSetAsync(Key, Value);  // string类型存入缓存
            }
        }

        /// <summary>
        /// 增加多个值
        /// </summary>
        /// <param name="DataOrder">db的序号</param>
        /// <param name="Key">Key名</param>
        /// <param name="Values">多个Key值</param>
        /// <returns></returns>
        public static async Task<bool> AddStringValues_Redis(int DataOrder, string Key, List<string> Values)
        {
            IDatabase db = _con.GetDatabase(DataOrder);
            return await db.StringSetAsync(new KeyValuePair<RedisKey, RedisValue>[] { new KeyValuePair<RedisKey, RedisValue>(Key, JsonConvert.SerializeObject(Values)) });  // 写入缓存
        }

        // 修改(值)

        /// <summary>
        /// 删
        /// </summary>
        /// <param name="DataOrder">db的序号</param>
        /// <param name="Key">Key名</param>
        /// <returns></returns>
        public static bool DelStringValue_Redis(int DataOrder, string Key)
        {
            IDatabase db = _con.GetDatabase(DataOrder);  // GetDatabase()括号中如果不填写数字就默认是0
            return db.KeyDelete(Key);  // 删除缓存key的缓存
        }
        #endregion String类型

        #region hash 哈希
        /// <summary>
        /// 查
        /// </summary>
        /// <param name="DataOrder">db的序号</param>
        /// <param name="Key">Key</param>
        /// <param name="FieId">HashKey</param>
        /// <returns></returns>
        public static string GetHashValue_Redis(int DataOrder, string Key, string FieId)
        {
            IDatabase database = _con.GetDatabase(DataOrder);
            return database.HashGet(Key, FieId);  // 得到缓存
        }

        /// <summary>
        /// 获取Hash所有的值
        /// </summary>
        /// <param name="DataOrder">db的序号</param>
        /// <param name="Key">Key</param>
        /// <returns></returns>
        public static List<string> GetAllHashValue_Redis(int DataOrder, string Key)
        {
            IDatabase database = _con.GetDatabase(DataOrder);
            HashEntry[] hashEntries = database.HashGetAll(Key);  // 得到缓存

            return hashEntries.Select(x => x.ToString()).ToList();
        }

        /// <summary>
        /// 增
        /// </summary>
        /// <param name="DataOrder">db的序号</param>
        /// <param name="Key">Key</param>
        /// <param name="FieId">HashKey</param>
        /// <param name="Value">HashValue</param>
        /// <returns></returns>
        public static bool AddHashValue_Redis(int DataOrder, string Key, string FieId, string Value)
        {
            IDatabase database = _con.GetDatabase(DataOrder);
            return database.HashSet(Key, FieId, Value);  // 写入缓存
        }

        // 增加多个值
        public static void AddHashValues_Redis(int DataOrder, string Key, Dictionary<string, string> FieIds)
        {
            IDatabase database = _con.GetDatabase(DataOrder);

            HashEntry[] hashEntries = FieIds.Select(i => new HashEntry(i.Key, JsonConvert.SerializeObject(i.Value))).ToArray();

            database.HashSet(Key, hashEntries);
            //foreach (var bb in Listbb)
            //{
            //    database.HashDelete("hashList", bb.Name);//删除缓存key下的缓存
            //}
        }
        // 修改(值)

        /// <summary>
        /// 删除hashkey元素
        /// </summary>
        /// <param name="DataOrder">db的序号</param>
        /// <param name="Key">key</param>
        /// <param name="HashKey">HashKey</param>
        /// <returns></returns>
        public static bool DelHashKeyValue_Redis(int DataOrder, string Key, string HashKey)
        {
            IDatabase database = _con.GetDatabase(DataOrder);
            return database.HashDelete(Key, HashKey);//删除(缓存key和键对应的缓存数据) 
        }

        /// <summary>
        /// 删除
        /// </summary>
        /// <param name="DataOrder">db的序号</param>
        /// <param name="Key">key</param>
        /// <param name="Value">Value</param>
        /// <returns></returns>
        public static bool DelHashValue_Redis(int DataOrder, string Key)
        {
            IDatabase database = _con.GetDatabase(DataOrder);
            return database.KeyDelete(Key);//删除(缓存key和键对应的缓存数据) 
        }
        #endregion hash 哈希

        #region set 集合
        /// <summary>
        /// 查所有
        /// </summary>
        /// <param name="DataOrder">db的序号</param>
        /// <param name="Key">Key名</param> 
        public static List<string> GetSetValue_Redis(int DataOrder, string Key)
        {
            IDatabase db = _con.GetDatabase(DataOrder);  // GetDatabase()括号中如果不填写数字就默认是0
            var rrs = db.SetMembers(Key);

            return rrs.Select(x => x.ToString()).ToList();
        }
        /// <summary>
        /// 增
        /// </summary>
        /// <param name="DataOrder">db的序号</param>
        /// <param name="Key">Key</param>
        /// <param name="Value">Value</param>
        /// <returns></returns>
        public static bool AddSetValue_Redis(int DataOrder, string Key, string Value)
        {
            IDatabase db = _con.GetDatabase(DataOrder);  // GetDatabase()括号中如果不填写数字就默认是0
            return db.SetAdd(Key, Value);  // set类型存入缓存
        }
        /// <summary>
        /// 增加多个
        /// </summary>
        /// <param name="DataOrder">db的序号</param>
        /// <param name="Key">Key</param>
        /// <param name="Values">Values</param>
        /// <returns></returns>
        public static long AddSetValues_Redis(int DataOrder, string Key, List<string> Values)
        {
            IDatabase db = _con.GetDatabase(DataOrder);  // GetDatabase()括号中如果不填写数字就默认是0
            return db.SetAdd(Key, Values.Select(i => new StackExchange.Redis.RedisValue(i)).ToArray());
        }
        // 修改(值)


        /// <summary>
        /// 删除SetKey
        /// </summary>
        /// <param name="DataOrder">db的序号</param>
        /// <param name="Key">Key</param>
        /// <param name="FeiId">SetKey</param>
        /// <returns></returns>
        public static bool DelSetKeyValue_Redis(int DataOrder, string Key, string Value)
        {
            IDatabase db = _con.GetDatabase(DataOrder);  // GetDatabase()括号中如果不填写数字就默认是0
            return db.SetRemove(Key, Value);  // 删除(key和value对应的缓存数据)
        }

        /// <summary>
        /// 删
        /// </summary>
        /// <param name="DataOrder">db的序号</param>
        /// <param name="Key">Key</param>
        /// <returns></returns>
        public static bool DelSetValue_Redis(int DataOrder, string Key)
        {
            IDatabase db = _con.GetDatabase(DataOrder);  // GetDatabase()括号中如果不填写数字就默认是0
            return db.KeyDelete(Key);  // 删除key对应的缓存数据
        }

        #endregion set 集合

        #region zset 有序集合
        /// <summary>
        /// 查
        /// </summary>
        /// <param name="DataOrder">db的序号</param>
        /// <param name="Key">Key</param> 
        public static List<ZsetValue> GetZSetValue_Redis(int DataOrder, string Key)
        {
            IDatabase db = _con.GetDatabase(DataOrder);  // GetDatabase()括号中如果不填写数字就默认是0
            var result = db.SortedSetScan(Key);
            return result.Select(item => new ZsetValue() { Value = item.Element, Order = item.Score.ToString() }).ToList<ZsetValue>();
        }

        /// <summary>
        /// 增
        /// </summary>
        /// <param name="DataOrder">db的序号</param>
        /// <param name="Key">Key</param>
        /// <param name="Value">Value</param>
        /// <param name="Order">优先级</param>
        /// <returns></returns>
        public static bool AddZSetValue_Redis(int DataOrder, string Key, string Value, int Order)
        {
            IDatabase db = _con.GetDatabase(DataOrder);  // GetDatabase()括号中如果不填写数字就默认是0
            return db.SortedSetAdd(Key, Value, Order);  //添加
        }
        // 修改(值)

        /// <summary>
        /// 删ZSetKey
        /// </summary>
        /// <param name="DataOrder"></param>
        /// <param name="Key"></param>
        /// <returns></returns>
        public static bool DelZSetKeyValue_Redis(int DataOrder, string Key, string Value)
        {
            IDatabase db = _con.GetDatabase(DataOrder);  // GetDatabase()括号中如果不填写数字就默认是0
            return db.SortedSetRemove(Key, Value);//删除
        }
        // 删
        public static bool DelZSetValue_Redis(int DataOrder, string Key)
        {
            IDatabase db = _con.GetDatabase(DataOrder);  // GetDatabase()括号中如果不填写数字就默认是0
            return db.KeyDelete(Key);//删除key对应的缓存数据
        }

        #endregion zset 有序集合

        #region list 列表
        /// <summary>
        /// 查
        /// </summary>
        /// <param name="DataOrder">db的序号</param>
        /// <param name="Key">Key名</param> 
        public static List<string> GetListValue_Redis(int DataOrder, string Key)
        {
            IDatabase db = _con.GetDatabase(DataOrder);  // GetDatabase()括号中如果不填写数字就默认是0
            var ss = db.ListRange(Key);  // 得到缓存
            return ss.Select(item => item.ToString()).ToList<string>();
        }
        /// <summary>
        /// 增
        /// </summary>
        /// <param name="DataOrder">db的序号</param>
        /// <param name="Key">Key</param>
        /// <param name="Value">Value</param>
        /// <param name="IsTop">是否从顶部</param>
        /// <returns></returns>
        public static long AddListValue_Redis(int DataOrder, string Key, string Value, bool IsTop = false)
        {
            IDatabase db = _con.GetDatabase(DataOrder);  // GetDatabase()括号中如果不填写数字就默认是0
            if (IsTop)
            {
                return db.ListLeftPush(Key, Value);  // 底部插入
            }
            else
            {
                return db.ListRightPush(Key, Value);  // 底部插入
            }
        }

        // 修改(值)

        /// <summary>
        /// 从顶部或者底部删除
        /// </summary>
        /// <param name="DataOrder">db的序号</param>
        /// <param name="Key">Key</param>
        /// <param name="IsTop">是否从顶部</param>
        /// <returns></returns>
        public static string DelListKeyValue_Redis(int DataOrder, string Key, bool IsTop = false)
        {
            IDatabase db = _con.GetDatabase(DataOrder);  // GetDatabase()括号中如果不填写数字就默认是0
            if (IsTop)
            {
                return db.ListLeftPop(Key);  // 底部插入
            }
            else
            {
                return db.ListRightPop(Key);  // 底部插入
            }
        }

        // 删
        public static bool DelListValue_Redis(int DataOrder, string Key)
        {
            IDatabase db = _con.GetDatabase(DataOrder);  // GetDatabase()括号中如果不填写数字就默认是0
            return db.KeyDelete(Key);//删除key对应的缓存数据
        }

        #endregion list 列表

        #region stream 不常用-略

        #endregion  stream
    }

    /// <summary>
    ///  Zset的查询类
    /// </summary>
    public class ZsetValue
    {
        public string Value { set; get; }

        public string Order { set; get; }
    }
}

3.存入批量的实体

        [HttpPost]
        public bool InsertRedis()
        {
            //查出数据
            List<Student> list = stuservice.GetStudentList().ToList();
            bool flag = true;
            foreach (Student student in list)
            {
                string str = JsonConvert.SerializeObject(student);
                //定义过期时间
                TimeSpan timeSpan = new TimeSpan(0, 10, 0);
                if (!RedisHelper.AddStringValue_Redis(1, student.id.ToString(), str, timeSpan).Result)
                {
                    flag = false;
                }
            }
            return flag;
        }

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值