C# Redis学习笔记(三)-StackExchange.Redis

1、StackExchange.Redis基础操作帮助类

/**
*┌──────────────────────────────────────────────────────────────┐
*│ 描    述:Redis相关的工具类(Redis基础操作帮助类)                                                   
*│ 作    者:执笔小白                                              
*│ 版    本:2.0                                       
*│ 创建时间:2022-5-06 15:40:56                            
*└──────────────────────────────────────────────────────────────┘
*┌──────────────────────────────────────────────────────────────┐
*│ 命名空间: Util.NoSQLHelpers                     
*│ 类    名:RedisHelper                                     
*└──────────────────────────────────────────────────────────────┘
*/
using System;
using System.Collections.Generic;
using System.Configuration;
using System.Linq;
using System.Windows.Forms;
using Newtonsoft.Json;
using StackExchange.Redis;

namespace Util.NoSQLHelpers
{
    /// <summary>
    /// Redis基础操作帮助类
    /// </summary>
    public class RedisHelper
    {
        #region 变量
        /// <summary>
        /// 初始化链接
        /// RedisConStr:127.0.0.1:6379,password=ZhibiXiaobai123.
        /// </summary>
        private static ConnectionMultiplexer _con;  //  = ConnectionMultiplexer.Connect("127.0.0.1:6379,password=ZhibiXiaobai123.");//此处写redis的账号和密码;

        // private string _host= ConfigurationSettings.AppSettings["RedisConStr"].Trim();
        #endregion 变量

        #region 初始化
        /// <summary>
        /// 初始化数据库链接
        /// </summary>
        /// <param name="conStr">数据库连接字符串</param>
        public static void Initial(string conStr)
        {
            _con = ConnectionMultiplexer.Connect(conStr);  // 此处写redis的账号和密码
        }
        #endregion 初始化

        #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 bool AddStringValue_Redis(int DataOrder, string Key, string Value, TimeSpan? expiry = null)
        {
            IDatabase db = _con.GetDatabase(DataOrder);  // GetDatabase()括号中如果不填写数字就默认是0
            if (expiry != null)
            {
                return db.StringSet(Key, Value, expiry);  // string类型存入缓存
            }
            else
            {
                return db.StringSet(Key, Value);  // string类型存入缓存
            }
        }

        /// <summary>
        /// 增加多个值
        /// </summary>
        /// <param name="DataOrder">db的序号</param>
        /// <param name="Key">Key名</param>
        /// <param name="Values">多个Key值</param>
        /// <returns></returns>
        public static bool AddStringValues_Redis(int DataOrder, string Key, List<string> Values)
        {
            IDatabase db = _con.GetDatabase(DataOrder);
            return db.StringSet(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; }
    }
}

2、链接字符串:

var conn = ConnectionMultiplexer.Connect("localhost:6379,password=...");

配置选项
ConfigurationOptions 包含大量的配置选项,一些常用的配置如下:

abortConnect : 当为true时,当没有可用的服务器时则不会创建一个连接
allowAdmin : 当为true时 ,可以使用一些被认为危险的命令
channelPrefix:所有pub/sub渠道的前缀
connectRetry :重试连接的次数
connectTimeout:超时时间
configChannel: Broadcast channel name for communicating configuration changes
defaultDatabase : 默认0-1
keepAlive : 保存x秒的活动连接
name:ClientName
password:password
proxy:代理 比如 twemproxy
resolveDns : 指定dns解析
serviceName : Not currently implemented (intended for use with sentinel)
ssl={bool} : 使用sll加密
sslHost={string} : 强制服务器使用特定的ssl标识
syncTimeout={int} : 异步超时时间
tiebreaker={string}:Key to use for selecting a server in an ambiguous master scenario
version={string} : Redis version level (useful when the server does not make this available)
writeBuffer={int} : 输出缓存区的大小

各配置项用逗号分割

3、测试Demo

  https://gitee.com/qq28069933146_admin/csharp_adonet_demo

posted @   ꧁执笔小白꧂  阅读(640)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· C#/.NET/.NET Core优秀项目和框架2025年2月简报
· 一文读懂知识蒸馏
· Manus爆火,是硬核还是营销?
· 终于写完轮子一部分:tcp代理 了,记录一下
点击右上角即可分享
微信分享提示