.NET 8 中使用CSRedisCore 操作Redis详解

发布时间 2024-01-09 16:00:52作者: 清和时光

前言:

.Net中操作Redis的库有几个比较经典的,如ServiceStack.RedisStackExchange.Redis,但是都有各自的缺点
ServiceStack.Redis是商业版,免费版有限制;
StackExchange.Redis是免费版,早期有TimeoutBug,当前版本使用需要全部使用异步方法方可解决;
所以都不推荐使用了,目前比较好用的是 CSRedisCore这个库,优点很多,如

1、CSRedisClient和RedisHelper保持所有方法名与redis-cli一致
2、支持geo类型命令(需要redis-server 3.2或更高版本)
3、支持Redis集群redis-trib.rb
4、支持Redis哨兵和主从
5、支持流类型命令(需要redis-server 5.0及更高版本)
6、反序列对象获取,如:Get<byte[]>、HGet<byte[]>,所以获取方法都重载了,默认获取仍然是string;
7、SafeObjectPool 的引入使用;
等等。。。

目前官方有2个库分别是

(1).CSRedisCore:主库,实现对接 redis各种功能
(2).Caching.CSRedis:分布式缓存 CSRedisCore 实现 Microsoft.Extensions.Caching
下面就具体介绍一下CSRedisCore.Net WebApi 项目中常用的方式:

使用方式上就有2中形式:

用法1、CSRedisClient实例化的对象

    var rds = new CSRedis.CSRedisClient("127.0.0.1:6379,password=YourPassword");
    services.AddSingleton(rds);   //注册成全局单例

用法2-RedisHelper帮助类

    var rds = new CSRedis.CSRedisClient("127.0.0.1:6379,password=YourPassword");//如果你没有给redis设置密码,那么直接写上ip就行"127.0.0.1:6379"
    RedisHelper.Initialization(rds);

关于连接字符串的介绍,有需要的时候可以自己加入

参数名 默认值 说明
password <空> 密码
defaultDatabase 0 默认数据库
poolsize 50 连接池大小
connectTimeout 5000 连接超时设置(毫秒)
syncTimeout 10000 发送/接收超时设置(毫秒)
idleTimeout 0 连接池内元素空闲时间(毫秒),适用连接远程redis-server
preheat true 预热连接
ssl false 是否开启加密传输
writeBuffer 10240 异步方法写入缓冲区大小(字节)
tryit 0 执行命令出错,尝试重试的次数
name <空> 连接名称,可以使用 Client List 命令查看
prefix <空> key前辍,所有方法都会附带此前辍,csredis.Set(prefix + “key”, 111);
以上两种都可以,我自己比较常用第二种静态帮助类的方式,到处都可以直接用,比较方便,下面介绍常用的方法
1、存取操作
   RedisHelper.Set("test1", "123123", 60);
   RedisHelper.Get("test1");

2、发布订阅

   //发布
   RedisHelper.Publish("chan1", "123123123");
   //订阅
   RedisHelper.Subscribe(
    ("chan1", msg => Console.WriteLine(msg.Body)),
    ("chan2", msg => Console.WriteLine(msg.Body))
   );

先介绍这两种比较常用的操作,后续用到其它的会继续更新。。。