[开源福利] FreeRedis 历时两年正式发布 v1.0 [C#.NET Redis Client]
最近很多 .net QQ 群无故被封停,特别是 wpf 群几乎全军覆没。依乐祝的 .net6交流群,晓晨的 .net跨平台交流群,导致很多码友流离失所无家可归,借此机会使用一次召唤术,有需要的请加群:560611514【.NET C#爱好者】,822074314【DotNet开发交流群】
前言
.NET 下 RedisClient SDK 选择挺多,国人常用免费的有 StackExchange.Redis/CSRedis/Newlife.Redis,收费的有 ServiceStack.Redis。
如果你是 CSRedis 或 ServiceStack.Redis 粉,那么一定要不要错过关注 FreeRedis,它们的 API 非常相似,方法名、参数与 redis.io 官方命令文档保持一致,避免了二次转换的理解成本。 redis 命令可是有接近300个呢~~~
提示:CSRedisCore 与 FreeRedis 是同一个作者,后者是基于 redis6.0 特性重新打造,解决了 CSRedisCore 的一些老问题,扩展性更强。
开源理念
FreeRedis 的命名来自,“自由”、“免费”,它和名字与 FreeSql 是一个理念,简易是他们一致的追寻方向,最低可支持 .NET Framework 4.0 运行环境,支持到 Redis-server 8.0(超时空版本)。
开源地址:https://github.com/2881099/FreeRedis
FreeRedis 以最宽松的开源协议 MIT 开源,从第一个版本 v0.0.1 发布至今已有 22个月,时间验证了其可靠性,是时候正式发布 v1.0 版本公开给大家,大家做 .neter 不容易,多一个选择多一条路。
由于之前异步方法的优化一直未开放,v1.0 正式开放异步方法
FreeRedis 整个源码是零依赖,使用它只会在 bin 目录产生一个 FreeRedis.dll,非常的轻量级,并且其功能非常强大:
FreeRedis
基于 .NET 的 Redis 客户端,支持 .NET Core 2.1+、.NET Framework 4.0+ 以及 Xamarin。
- 所有方法名与 redis-cli 保持一致
- 支持 Redis 集群(服务端要求 3.2 及以上版本)
- 支持 Redis 哨兵模式
- 支持主从分离(Master-Slave)
- 支持发布订阅(Pub-Sub)
- 支持 Redis Lua 脚本
- 支持管道(Pipeline)
- 支持事务、命令拦截、日志事件
- 支持 GEO 命令(服务端要求 3.2 及以上版本)
- 支持 STREAM 类型命令(服务端要求 5.0 及以上版本)
- 支持本地缓存(Client-side-cahing,服务端要求 6.0 及以上版本)
- 支持 Redis 6 的 RESP3 协议
QQ群:4336577(已满)、8578575(在线)、52508226(在线)
快速入门
public static RedisClient cli = new RedisClient("127.0.0.1:6379,password=123,defaultDatabase=13");
cli.Serialize = obj => JsonConvert.SerializeObject(obj); //序列化,存对象
cli.Deserialize = (json, type) => JsonConvert.DeserializeObject(json, type);
cli.Notice += (s, e) => Console.WriteLine(e.Log); //打印命令日志
cli.Set("key1", "value1");
cli.MSet("key1", "value1", "key2", "value2");
string value1 = cli.Get("key1");
string[] vals = cli.MGet("key1", "key2");
支持 STRING、HASH、LIST、SET、ZSET、BITMAP、HyperLogLog、GEO、Stream、RedisJSON 以及布隆过滤器等。
| 参数 | 默认值 | 说明 |
|---|---|---|
| protocol | RESP2 | 若使用 RESP3 协议,你需要 Redis 6.0 环境 |
| user | <empty> | Redis 服务端用户名,要求 Redis 6.0 环境 |
| password | <empty> | Redis 服务端密码 |
| defaultDatabase | 0 | Redis 服务端数据库 |
| max poolsize | 100 | 连接池最大连接数 |
| min poolsize | 5 | 连接池最小连接数 |
| idleTimeout | 20000 | 连接池中元素的空闲时间(单位为毫秒 ms),适用于连接到远程服务器 |
| connectTimeout | 10000 | 连接超时,单位为毫秒(ms) |
| receiveTimeout | 10000 | 接收超时,单位为毫秒(ms) |
| sendTimeout | 10000 | 发送超时,单位为毫秒(ms) |
| encoding | utf-8 | 字符串字符集 |
| retry | 0 | 协议发生错误时,重试执行的次数 |
| ssl | false | 启用加密传输 |
| name | <empty> | 连接名,使用 CLIENT LIST 命令查看 |
| prefix | <empty> | key 前辍,所有方法都会附带此前辍,cli.Set(prefix + "key", 111); |
IPv6: [fe80::b164:55b3:4b4f:7ce6%15]:6379
Master-Slave (读写分离)
public static RedisClient cli = new RedisClient(
"127.0.0.1:6379,password=123,defaultDatabase=13",
"127.0.0.1:6380,password=123,defaultDatabase=13",
"127.0.0.1:6381,password=123,defaultDatabase=13"
);
var value = cli.Get("key1");
写入时连接 127.0.0.1:6379,读取时随机连接 6380 6381
Redis Sentinel (哨兵高可用)
public static RedisClient cli = new RedisClient(
"mymaster,password=123",
new [] { "192.169.1.10:26379", "192.169.1.11:26379", "192.169.1.12:26379" },
true //是否读写分离
);
Redis Cluster (集群)
假如你有一个 Redis Cluster 集群,其中有三个主节点(7001-7003)、三个从节点(7004-7006),则连接此集群的代码:
public static RedisClient cli = new RedisClient(
new ConnectionStringBuilder[] { "192.168.0.2:7001", "192.168.0.2:7002", "192.168.0.2:7003" }
);
Client-side-cahing (本地缓存)
服务端要求 6.0 及以上版本
cli.UseClientSideCaching(new ClientSideCachingOptions
{
//本地缓存的容量
Capacity = 3,
//过滤哪些键能被本地缓存
KeyFilter = key => key.StartsWith("Interceptor"),
//检查长期未使用的缓存
CheckExpired = (key, dt) => DateTime.Now.Subtract(dt) > TimeSpan.FromSeconds(2)
});
重要功能了解详细:https://www.cnblogs.com/kellynic/p/14009158.html
Subscribe (订阅)
using (cli.Subscribe("abc", ondata)) //wait .Dispose()
{
Console.ReadKey();
}
void ondata(string channel, string data) =>
Console.WriteLine($"{channel} -> {data}");
lpush + blpop:
using (cli.SubscribeList("list_key", ondata)) //wait .Dispose()
{
Console.ReadKey();
}
void ondata(string listValue) =>
Console.WriteLine(listValue);
Scripting (脚本)
var r1 = cli.Eval("return {KEYS[1],KEYS[2],ARGV[1],ARGV[2]}",
new[] { "key1", "key2" }, "first", "second") as object[];
var r2 = cli.Eval("return {1,2,{3,'Hello World!'}}") as object[];
cli.Eval("return redis.call('set',KEYS[1],'bar')",
new[] { Guid.NewGuid().ToString() })
Pipeline (管道)
using (var pipe = cli.StartPipe())
{
pipe.IncrBy("key1", 10);
pipe.Set("key2", Null);
pipe.Get("key1");
object[] ret = pipe.EndPipe();
Console.WriteLine(ret[0] + ", " + ret[2]);
}
Transaction (事务)
using (var tran = cli.Multi())
{
tran.IncrBy("key1", 10);
tran.Set("key2", Null);
tran.Get("key1");
object[] ret = tran.Exec();
Console.WriteLine(ret[0] + ", " + ret[2]);
}
GetDatabase (切库)
using (var db = cli.GetDatabase(10))
{
db.Set("key1", 10);
var val1 = db.Get("key1");
}
Scan (扫描)
支持集群模式
foreach (var keys in cli.Scan("*", 10, null))
{
Console.WriteLine(string.Join(", ", keys));
}
License (许可证)
结束语
如果你遇到了 StackExchange.Redis Timeout 问题,不妨试试 FreeRedis,它轻巧、强大、听话。
如果你还在使用 ServiceStack.Redis 破解版,不妨试试免费的 FreeRedis,它免费、开源、乖巧。
开源地址:https://github.com/2881099/FreeRedis
作者是什么人?
作者是一个入行 18年的老批,他目前写的.net 开源项目有:
| 开源项目 | 描述 | 开源地址 | 开源协议 |
|---|---|---|---|
| FreeIM | 聊天系统架构 | https://github.com/2881099/FreeIM | MIT |
| FreeRedis | Redis SDK | https://github.com/2881099/FreeRedis | MIT |
| csredis | https://github.com/2881099/csredis | MIT | |
| FightLandlord | 斗DI主网络版 | https://github.com/2881099/FightLandlord | 学习用途 |
| FreeScheduler | 定时任务 | https://github.com/2881099/FreeScheduler | MIT |
| IdleBus | 空闲容器 | https://github.com/2881099/IdleBus | MIT |
| FreeSql | ORM | https://github.com/dotnetcore/FreeSql | MIT |
| FreeSql.Cloud | 分布式tcc/saga | https://github.com/2881099/FreeSql.Cloud | MIT |
| FreeSql.AdminLTE | 低代码后台生成 | https://github.com/2881099/FreeSql.AdminLTE | MIT |
| FreeSql.DynamicProxy | 动态代理 | https://github.com/2881099/FreeSql.DynamicProxy | 学习用途 |
需要的请拿走,这些都是最近几年的开源作品,以前更早写的就不发了。
[开源福利] FreeRedis 历时两年正式发布 v1.0 [C#.NET Redis Client]的更多相关文章
- 微信 CLI 工具正式发布 v1.0
前言 为了让开发者可以更加方便舒适地获取到微信开发的资源,今天我们基于 Senparc.Weixin SDK 正式发布了基于 .NET 的微信 CLI 工具:Weixin.CLI(v1.0). 通过 ...
- j2ee开源项目——IT学习者博客(itxxzblog v1.0)
大家好,我是IT学习者-螃蟹,已经有近一周的时间没有更新文章了,作为回报,今天起将更新一个大件,也就是螃蟹还在进行中的IT学习者博客. IT学习者博客的初期设计已经完成,功能也已经完成了大半,具备了当 ...
- 阿里 Midway 正式发布 Serverless v1.0,研发提效 50%
Github:https://github.com/midwayjs/midway 开源为了前端和 Node.js 的发展,点 Star! 去年阿里提出 Serverless 架构,并利用其新一代研发 ...
- AEAI EM费用管理系统V1.0.2版本开源发布
本次开源发布是AEAI EM费用管理系统 V1.0.2版,该版本是此产品的首个版本,产品现已开源并上传至开源社区http://www.oschina.net/p/aeai-em. 产品说明: AEAI ...
- J20航模遥控器开源项目系列教程(一)制作教程 | 基础版V1.0发布,从0到1
我们的开源宗旨:自由 协调 开放 合作 共享 拥抱开源,丰富国内开源生态,开展多人运动,欢迎加入我们哈~ 和一群志同道合的人,做自己所热爱的事! 项目开源地址:https://github.com/C ...
- .NET redis 客户端开源组件 FreeRedis (继 CSRedisCore 之后重写)
什么是 FreeRedis FreeRedis 是一款 .NET redis 客户端开源组件,以 MIT 协议开源托管于 github,目前支持 .NET 5..NETCore 2.1+..NETFr ...
- 体验 正式发布 的OSM v1.0.0 版本
2021年10月份发布了OSM 1.0 RC[1],在过去的几个月里,OSM 的贡献者一直在努力为 v1.0.0 版本的发布做准备.2022年2月1日,OSM 团队正式发布 1.0.0 版本[2]. ...
- PyRedisAdmin v1.0 Beta 发布,Redis 在线管理工具 - 开源中国社区
PyRedisAdmin v1.0 Beta 发布,Redis 在线管理工具 - 开源中国社区 PyRedisAdmin v1.0 Beta 发布,Redis 在线管理工具
- MingQQ v1.0高仿版开源了,使用WebQQ协议实现了QQ客户端基本的聊天功能...
MingQQ v1.0高仿版开源了,使用WebQQ协议实现了QQ客户端基本的聊天功能... MingQQ目前支持的功能如下:1.支持普通方式登录.验证码方式登录.注销.保持在线.改变在线状态.2.支持 ...
随机推荐
- [零基础学IoT Pwn] 环境搭建
[零基础学IoT Pwn] 环境搭建 0x00 前言 这里指的零基础其实是我们在实战中遇到一些基础问题,再相应的去补充学习理论知识,这样起码不会枯燥. 本系列主要是利用网上已知的IoT设备(路由器)漏 ...
- if else 还在用吗?
当我们在使用if else 的时候,你是否闻到代码的坏味道呢? 除非非常简单的逻辑,当我们在写一大坨if else的时候,就应该审视一下是否这样写合适呢?是否这一坨代码体现某一个业务语义呢?是否体现领 ...
- C#实现FFT(递归法)
C#实现FFT(递归法) 1. C#实现复数类 我们在进行信号分析的时候,难免会使用到复数.但是遗憾的是,C#没有自带的复数类,以下提供了一种复数类的构建方法. 复数相比于实数,可以理解为一个二维数, ...
- .NET 使用自带 DI 批量注入服务(Service)和 后台服务(BackgroundService)
今天教大家如何在asp .net core 和 .net 控制台程序中 批量注入服务和 BackgroundService 后台服务 在默认的 .net 项目中如果我们注入一个服务或者后台服务,常规的 ...
- 基于串口校时的数字钟设计(verilog实现)
任务: 电路图设计: 设计: 模块1:1.先设计一个计数时钟,为了仿真方便,这里把1000ns当作1s. 创建一个计数器second_lim,当计数到1000/20时清零,即1s. 秒显示器secon ...
- 4-16译码器(always,case用法)
4-16译码器学习记录 模块文件 1 module decoder_4_16( 2 a, 3 b, 4 c, 5 d, 6 out, 7 ); 8 input a; 9 input b; 10 inp ...
- Web Worker: Shared Worker的使用
Web Worker: Shared Worker的使用 参考资料: JavaScript高级程序第四版 https://juejin.cn/post/7064486575916187656 http ...
- Dubbo源码(五) - 服务目录
前言 本文基于Dubbo2.6.x版本,中文注释版源码已上传github:xiaoguyu/dubbo 今天,来聊聊Dubbo的服务目录(Directory).下面是官方文档对服务目录的定义: 服务目 ...
- odoo14 重启服务后权限不见了
1 Odoo14权限更新有两个地方: 2 一.你在编写xml权限记录的时候没有将noupdate设置为'1'这样导致你每次升级模块,你的权限都会重置一遍. 3 二.你在运行odoo-bin服务的时候, ...
- HDFS核心原理
HDFS 读写解析 HDFS 读数据流程 客户端通过 FileSystem 向 NameNode 发起请求下载文件,NameNode 通过查询元数据找到文件所在的 DataNode 地址 挑选一台 D ...