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

608 阅读2分钟

前言: .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<空>密码
defaultDatabase0默认数据库
poolsize50连接池大小
connectTimeout5000连接超时设置(毫秒)
syncTimeout10000发送/接收超时设置(毫秒)
idleTimeout0连接池内元素空闲时间(毫秒),适用连接远程redis-server
preheattrue预热连接
sslfalse是否开启加密传输
writeBuffer10240异步方法写入缓冲区大小(字节)
tryit0执行命令出错,尝试重试的次数
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))
   );

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