最近很多 .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,非常的轻量级,并且其功能非常强大:
基于 .NET 的 Redis 客户端,支持 .NET Core 2.1+、.NET Framework 4.0+ 以及 Xamarin。
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
Redis 服务端用户名,要求 Redis 6.0 环境
password
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
连接名,使用 CLIENT LIST 命令查看
prefix
key
前辍,所有方法都会附带此前辍,cli.Set(prefix + "key", 111);
IPv6: [fe80::b164:55b3:4b4f:7ce6%15]:6379
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
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 集群,其中有三个主节点(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" }
);
服务端要求 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
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);
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() })
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]);
}
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]);
}
using (var db = cli.GetDatabase(10))
{
db.Set("key1", 10);
var val1 = db.Get("key1");
}
支持集群模式
foreach (var keys in cli.Scan("*", 10, null))
{
Console.WriteLine(string.Join(", ", keys));
}
如果你遇到了 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
学习用途
需要的请拿走,这些都是最近几年的开源作品,以前更早写的就不发了。
手机扫一扫
移动阅读更方便
你可能感兴趣的文章