7

CSReid库在NetCore工作场景中的使用

 3 years ago
source link: https://my.oschina.net/u/3081398/blog/5037106
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.
neoserver,ios ssh client
CSReid库在NetCore工作场景中的使用 - 三十三重天的个人空间 - OSCHINA - 中文开源技术交流社区

作者博客|文章首发

过去 .net 最有名望的 ServiceStack.Redis 早已沦为商业用途,在 .NETCore 中使用只能充值。后来居上的 StackExchange.Redis 虽然能用,但是之前出现的各种Timeout错误也是让人很无语,所以也不作为使用的首选。经过网上的一些整理和推荐,发现了一款开源库CSReidsCore。

CSRedisCore是国人开源的一套Redis操作库,现在最新版本已经V3.6.5,经过几个实际公司项目的使用情况来看,还没有出现什么大的问题,本文主要介绍一下在使用这个库的过程中的一些自己的想法。

  • CSRedisClient和RedisHelper保持所有方法名称与redis-cli一致
  • 支持地理类型命令(需要redis-server 3.2或更高版本)
  • 支持Redis集群redis-trib.rb
  • 支持Redis Sentinel和主从
  • 支持流类型命令(需要redis-server 5.0及更高版本)
范围 默认 解释 密码 <空> Redis服务器密码 defaultDatabase 0 Redis服务器数据库 asyncPipeline 错误的 异步方法自动使用管道,并且10W并发时间为450ms(欢迎反馈) 池大小 50 连接池大小 空闲超时 20000 连接池(MS)中元素的空闲时间,适用于连接到远程Redis服务器 connectTimeout 5000 连接超时(MS) syncTimeout 10000 发送/接收超时(MS) 预热 5 预热连接,接收预热等值= 5个预热5个连接 自动处置 真的 跟踪系统退出事件以自动释放 ssl 错误的 启用加密传输 测试集群 真的 是否尝试正常模式,阿里云,腾讯云合并需要设置此选项为false 试试吧 0 执行错误,重试尝试 姓名 <空> 连接名称,使用客户端列表命令查看 字首 <空> key前辍,所有方法都会附有海军辍,csredis.Set(前缀+“ key”,111);

Redis单机

Redis唯一Db使用

根据Github作者推荐,如果你是唯一DB的使用场景,推荐使用这种方式初始化和使用

使用RedisHelper初始化和调用,是唯一Db下的推荐方式

var rds = new CSRedis.CSRedisClient("127.0.0.1:6379,password=123,defaultDatabase=0,poolsize=50,ssl=false,writeBuffer=10240");
RedisHelper.Initialization(rds);

//使用RedisHelper
RedisHelper.Set("test", DateTime.Now.ToString());
RedisHelper.Get("test");

Redis多个Db使用

实例数组作为单例注入

推荐方式:

将实例后的各个RedisDb整合在数组中,单例截注入services

var connectionString = "127.0.0.1:6379,password=123,poolsize=10";
var redis = new CSRedisClient[14];
for (var a = 0; a < redis.Length; a++)
redis[a] = new CSRedisClient(connectionString + ",defaultDatabase=" + a);

service.AddSingleton(redis);

创建多个ReidsHepler

每一个库对应一个RedisHelper,初始化指定Helper的Client实例

public abstract class MyHelper1 : RedisHelper<MyHelper1> {}
public abstract class MyHelper2 : RedisHelper<MyHelper2> {}

MyHelper1.Initialization(new CSRedisClient("...."));
MyHelper2.Initialization(new CSRedisClient("...."));

Redis集群

var csredis = new CSRedis.CSRedisClient(null,
"127.0.0.1:6371,password=123,defaultDatabase=11,poolsize=10,ssl=false,writeBuffer=10240",
"127.0.0.1:6372,password=123,defaultDatabase=12,poolsize=11,ssl=false,writeBuffer=10240",
"127.0.0.1:6373,password=123,defaultDatabase=13,poolsize=12,ssl=false,writeBuffer=10240",
"127.0.0.1:6374,password=123,defaultDatabase=14,poolsize=13,ssl=false,writeBuffer=10240");

csredis.Set("test", DateTime.Now.ToString());
csredis.Get("test");
var csredis = new CSRedis.CSRedisClient("mymaster,password=123",
new[] { "192.169.1.10:26379", "192.169.1.11:26379", "192.169.1.12:26379" });
csredis.Set("test", DateTime.Now.ToString());
csredis.Get("test");

分布式缓存

基于CSRedisCore开源库的分布式缓存用法也很简单,大体的思路和上文一致只是方法体变了而已

var csredis = new CSRedis.CSRedisClient("127.0.0.1:6379,password=123,defaultDatabase=13,ssl=false,writeBuffer=10240,poolsize=50,prefix=key前辍");
services.AddSingleton<IDistributedCache>(new Microsoft.Extensions.Caching.Redis.CSRedisCache(csredis));
var csredis = new CSRedis.CSRedisClient(null,
  "127.0.0.1:6371,password=123,defaultDatabase=11,poolsize=10,ssl=false,writeBuffer=10240,prefix=key前辍", 
  "127.0.0.1:6372,password=123,defaultDatabase=12,poolsize=11,ssl=false,writeBuffer=10240,prefix=key前辍",
  "127.0.0.1:6373,password=123,defaultDatabase=13,poolsize=12,ssl=false,writeBuffer=10240,prefix=key前辍",
  "127.0.0.1:6374,password=123,defaultDatabase=14,poolsize=13,ssl=false,writeBuffer=10240,prefix=key前辍");
services.AddSingleton<IDistributedCache>(new Microsoft.Extensions.Caching.Redis.CSRedisCache(csredis));

如果你存在多数据库切换的需求,可以参照”Redis多个Db使用“标签进行设置

CSRedis的高级用法可以参考这篇文章 .NETCore 简单且高级的库 csredis v3.0.0和Github官方库。一般情况使用不到,等到需要用到的时候再来回顾一下即可。

本文到此结束,希望对你有帮助 😃

如果还有什么疑问或者建议,可以多多交流,原创文章,文笔有限,才疏学浅,文中若有不正之处,万望告知。

更多精彩技术文章汇总在我的 公众号【程序员工具集】,持续更新,欢迎关注订阅收藏。


About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK