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

happlyfox 等级 366 1 1

关于我

作者博客|文章首发

过去 .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官方库。一般情况使用不到,等到需要用到的时候再来回顾一下即可。

文章参考

https://www.cnblogs.com/kellynic/p/9803314.html

https://github.com/2881099/csredis

_https://github.com/2881099/csredis/blob/master/src/Microsoft.Extensions.Caching.CSRedis/README.md

推荐阅读

Redis工具收费后新的开源已出现

GitHub上Star最高的工程师技能图谱

最后

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

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

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

收藏
评论区

相关推荐

我是Redis,MySQL大哥被我害惨了!
本文转自 轩辕之风 ,链接如下 https://mp.weixin.qq.com/s?__bizMzIyNjMxOTY0NA&mid2247486528&idx1&sn3f7b09eb21969fdb16f5b0805ff69fed&scene21wechat_redirect 我是Redis 你好,我是Redis,一个叫Antirez的
学完了C++语法之后该学什么??(数据库篇)
数据库与中间件 主要是MySQL、MongDB、Redis、Nginx等; 在大学的课程里,一般都会开设一门数据库的课程,不过这门数据库是没有针对某一种数据库语言的(例如 MySQL、SQlite)。不过我这里只讲 MySQL,因为最频繁。数据库不在多。 把MySQL学好,还是特别重要的,千万不能停留在会用的层面上,而是应该
开发机连接Docker中的redis容器小案例
在笔者日常开发中,都是把redis装在windows系统中。虽然可以通过RedisDesktopManager等客户端工具连接操作redis,但是还是
Go-连接Redis-学习go-redis包
Redis介绍 Redis是一个开源的内存数据结构存储,常用作数据库、缓存和消息代理。目前它支持的数据结构有诸如string、hash、list、set、zset、bitmap、hyperloglog、geospatial index和stream。Redis内置了复制、Lua脚本、LRU清除、事务和不同级别的磁盘持久性,并通过Redis Sentinel
Redis实现分布式锁
一、redis分布式锁的简易实现 用redis实现分布式锁是一个老生常谈的问题了。因为redis单条命令执行的原子性和高性能,当多个客户端执行setnx(相同key)时,最多只有一个获得成功。因此在对可用性要求不是特别高的场景下,redis分布式锁方案不失为一个性价比高的实现。 1. 多个客户端执行setnx lock
php操作redis哨兵模式,主从切换后自动获取master
本文将介绍如何使用PHP来连接redis哨兵模式。哨兵模式:大概的原理就是监听redis主库心跳包,如果心跳断开,则枚举一个从库推举成为新的主库,防止redis宕机不能使用。为了增强redis的性能,防止其挂掉,引用redis哨兵监控redis集群是个不错的选择。下面三步简单记录php连接redis哨兵。 第一步、获取哨兵模式连接redis句柄对象/
Windows 下编译 PHP Redis 扩展并支持 Igbinary 序列器
这是 PHP 下扩展的下载地址:当然,通过这个地址我们能够轻松的获取到 Redis 和 Igbinary 扩展并启用,但是,我们可以在页面上打开 phpinfo() 瞧瞧上方截图为重编译的 Redis 扩展,默认情况下通过上方网站下载的 Redis 扩展在 Available serializers 中只有 php 一项。目前仅编译了
Redis 未授权访问漏洞复现与利用
一、漏洞简介以及危害: 1.什么是redis未授权访问漏洞: Redis 默认情况下,会绑定在 0.0.0.0:6379,如果没有进行采用相关的策略,比如添加防火墙规则避免其他非信任来源 ip 访问等,这样将会将 Redis 服务暴露到公网上
Redis三种集群模式-Cluster集群模式
Redis三种集群模式Cluster集群模式一、  在之前有看到过redis集群部署的三种方案,不过性能最高的还是redis官方推荐的rediscluster,性能最高,下面介绍一下rediscluster这种模式。1、redisclusterA、采用去中心化的思想,没有中心节点的说法,它使用hash slot方式将16348个hash slot覆盖到所有节
Redis集群详解
Redis集群详解Redis有三种集群模式,分别是: 主从模式 Sentinel模式 Cluster模式 三种集群模式各有特点,关于Redis介绍可以参考这里:Redis官网:https://redis.io/ ,最新版本5.0.4 主从模式 主从模式介绍主从模式是三种模式中最简单的,在主从复制中,数据库分为两类:主数据库(master)和从数据库(sl
CSReid库在NetCore工作场景中的使用
关于我过去 .net 最有名望的 ServiceStack.Redis 早已沦为商业用途,在 .NETCore 中使用只能充值。后来居上的 StackExchange.Redis 虽然能用,但是之前出现的各种Timeout错误也是让人很无语,所以也不作为使用的首选。经过网上的一些整理和推荐,发现了一款开源库CSReidsCore。CSRedisCore是国人
redis在微服务领域的贡献
本文已收录 https://github.com/lkxiaolou/lkxiaolou 欢迎star。 前言说到redis,可能大家的脑海中蹦出的关键词是:NoSQL、KV、高性能、缓存等。但今天的文章从另一个角度——微服务来展开。这篇文章的起因也是源自一次面试经历,在面试一位来自陌陌的候选人(就是那个交友的陌陌)时,他提到一点让我觉得很有意思,他说red
springBoot集成redis
Redis作为一个Java后端面试中的一个常问考点,并且在项目中越来越常用,所以自己动手搭建了一个基于springboot集成redis做为数据缓存的demo(springboot集成mybatis、redis,并具有增删改查询接口)。关注微信公众号【菜鸟阿都】并回复:redis,可获得源码。后面也会继续深入研究redis相关知识,期待与大家一起学习交流。r
给dubbo贡献源码,做梦都在修bug
本文已收录 https://github.com/lkxiaolou/lkxiaolou 欢迎star。 一在之前的文章《redis在微服务领域的贡献》中,从一次面试经历中了解了redis可以在微服务中玩的这么溜,同时也从源码角度分析了dubbo的redis注册中心。最后得出了dubbo的redis注册中心不能用于生产的结论,其中原因有如下两点: 使用了ke
最新Java大厂高频面试题,看这一篇就够了!
常见resdis面试真题40道(含解析)1. 什么是 Redis?2. Redis 的数据类型?3. 使用 Redis 有哪些好处?4. Redis 相比 Memcached 有哪些优势?5. Memcache 与 Redis 的区别都有哪些?6. Redis 是单进程单线程的?7. 一个字符串类型的值能存储最大容量是多少?8. Redis