NewLife.Redis 6.3.2025.816-beta1657

NewLife.Redis - 高性能 Redis 客户端组件

GitHub top language GitHub License Nuget Downloads Nuget Nuget (with prereleases)

[English]

NewLife.Redis 是新生命团队打造的 高性能 / 高吞吐 / 易集成 的 Redis 客户端,核心目标:支撑实时计算、海量缓存、可靠消息、分布式基础设施等场景。组件自 2017 年起在多个千万 / 百亿级数据与高并发生产平台稳定运行,经受日均 80+ 亿次 调用考验。


目录


核心特性

  • 经大规模生产验证:200+ Redis 实例,日峰值 1 亿+ 业务对象写入 / 80+ 亿命令调用
  • 低延迟:单次 Get/Set 往返 200~600µs(微秒级,含网络)
  • 高吞吐:内置 连接池 (最大 100000 并发) + 同步高效协议解析 + 可选自动管道合并
  • 自动重试与多地址故障切换:Server 支持逗号分隔多节点,网络型异常快速切换
  • 丰富高级结构:List / Hash / Set / Queue / Stack / 延迟与可靠消费(基于 RPOPLPUSH/BRPOPLPUSH)
  • 批量优化:GetAll / SetAll / 管道聚合显著降低 RTT
  • 可插拔编码器:默认 JSON,可扩展二进制 / 自定义序列化,以减小包长与 GC 压力
  • 追踪与监控:支持 ITracer(APM 链路),可插入性能计数器 PerfCounter
  • 强命名 + 多目标框架:一份包覆盖 net45 / net461 / netstandard2.0 / netstandard2.1 / (扩展包含 netcoreapp3.1→net9)
  • 零外部重量级依赖,充分复用 NewLife 生态(日志、配置、序列化、安全)

架构与模块划分

┌──────────────────────────────────────────┐
│ Redis (基础核心)                         │
│  ├─ 连接池 IPool<ObjectPool<RedisClient>>│
│  ├─ 协议解析 RedisClient / RESP          │
│  ├─ 基础 KV / 批量 / 过期 / 计数器       │
│  ├─ 重试 & 多节点切换 / 超时 / 限制       │
│  ├─ Pipeline 管理 (Start/Stop/Auto)      │
│  └─ 序列化编码 (IPacketEncoder)          │
│                                          │
│ FullRedis (扩展)                         │
│  ├─ 列表 RedisList<T>                    │
│  ├─ 哈希 RedisHash<T> (键值字典)         │
│  ├─ 队列 / 栈 / Set / 延迟消费           │
│  ├─ 发布订阅 (若启用) / 搜索辅助         │
│  └─ 可靠消息 (RPOPLPUSH / BRPOPLPUSH)    │
│                                          │
│ Extensions (DI 集成)                     │
│  ├─ IDistributedCache 实现               │
│  └─ IDataProtection 后端存储             │
└──────────────────────────────────────────┘

关键类说明:

  • Redis:核心客户端,提供协议管线、连接复用、自动管道、批量操作、性能统计、重试与故障转移。
  • RedisClient:底层连接与 RESP 命令执行单元(内部对象,池化管理)。
  • FullRedis:在 Redis 基础上追加更丰富数据结构及更高级场景能力。
  • RedisList<T> / RedisHash<T> 等:对 Redis 原生命令进行泛型包装,统一编码与序列化策略。
  • IPacketEncoder:编解码策略,可切换 JSON / 二进制。

对比说明

能力 NewLife.Redis StackExchange.Redis 备注
连接池 内置,支持 Max=100000 Multiplexer(逻辑复用) 大并发场景更直观可控
自动管道 支持 AutoPipeline/FullPipeline 默认批量写入合并 精细控制与显式 StartPipeline
性能追踪 ITracer 接口 需外部集成 生态一致 APM 链路
序列化 可插拔 Encoder 仅字节/字符串,需外部序列化 降低调用侧样板代码
可靠消费 RPOPLPUSH/BRPOPLPUSH 包装 需手动实现 队列式工作流场景便利
生态整合 与 NewLife.* 组件无缝 同一风格 & 工具链

安装与快速开始

NuGet:NewLife.Redis

# 稳定版
dotnet add package NewLife.Redis
# 或开发版 (包含预发布)
dotnet add package NewLife.Redis -v *-*

示例(推荐单例,线程安全):

using NewLife.Caching;
using NewLife.Log;

XTrace.UseConsole();
var rds = new FullRedis("127.0.0.1:6379", "pass", 7)
{
    Log = XTrace.Log,
    ClientLog = XTrace.Log,   // 调试阶段打开
    AutoPipeline = 100        // 达到阈值自动提交管道
};

rds.Set("user:1", new { Name = "Alice", Time = DateTime.Now }, 3600);
var user = rds.Get<String>("user:1");
Console.WriteLine(user);

基础用法

rds.Set("k1", 123, 600);          // 设置并指定过期
var v = rds.Get<Int32>("k1");
var ok = rds.Add("k2", "init");   // 仅在不存在时写入
var old = rds.Replace("k2", "new");
rds.Increment("counter", 1);
rds.Decrement("counter", 2);

过期管理:SetExpire(key, TimeSpan)GetExpire(key)


批量与集合操作

rds.SetAll(new Dictionary<String,Object>{{"a",1},{"b",2},{"c",3}}, 300);
var dict = rds.GetAll<Int32>(new[]{"a","b","c"});

泛型集合:

var list = rds.GetList<String>("queue:demo");
list.Add("job1");
var first = list[0];

注意:基础 Redis 实例仅支持字符串类操作,高级集合请实例化 FullRedis


管道 Pipeline 与自动合并

场景:减少 RTT、提升批量操作吞吐。

var client = rds.StartPipeline();
for (var i = 0; i < 1000; i++) rds.Set($"p:{i}", i);
var results = rds.StopPipeline(); // results 为命令返回集合

自动模式:设置 AutoPipeline = 100 后,写操作累积到阈值自动提交;FullPipeline = true 时读请求也进入管道。


消息 / 队列 / 可靠消费

利用 List + RPOPLPUSH / BRPOPLPUSH 保障“取出-处理中-确认”原子性:

var src = rds.GetList<String>("jobs:ready");
var bak = rds.GetList<String>("jobs:working");
var job = src.RPOPLPUSH(bak.Key); // 取出放入备份队列
// 处理成功后从备份列表删除
bak.Remove(job);

阻塞获取:BRPOPLPUSH(destKey, timeoutSeconds),timeout=0 表示永久阻塞。


序列化与编码器

默认编码:RedisJsonEncoder(内置 JSON 主机)。可通过实现 IPacketEncoder 定制二进制格式以减少内存与网络:

rds.Encoder = new MyBinaryEncoder();

如需共享 JSON 配置或自定义时间/数字格式,可设置:rds.JsonHost = RedisJsonEncoder.GetJsonHost();


性能测试参考

源码内置 Benchmark(Redis.Bench),典型结果(40 逻辑处理器,批量优化):

写入 400,000 项 4 线程  ~576,368 ops
读取 800,000 项 8 线程  ~647,249 ops
删除 800,000 项 8 线程  ~1,011,378 ops

可执行:

rds.Bench(rand:true, batch:100);  // 随机 + 批量

实际性能受网络 RTT / 序列化复杂度 / Value 大小影响。建议单 Value 控制在 1.4KB 附近提升整体效率。


最佳实践与经验

  • 多实例拆分:按 Key 哈希 (CRC16/CRC32) 分布到多 Redis,提高扩展性
  • 合理 Value 大小:控制在 1~2KB;过大分片 / 压缩 / 结构化
  • 批量优先:能 GetAll/SetAll 不循环单键;利用管道降低往返
  • 高可靠消费:RPOPLPUSH + 备份列表手动确认
  • 序列化:二进制优于 JSON;必要时,用池化缓冲减少 GC
  • 性能监控:开启 Counter / Tracer 仅在需要时,避免热路径开销

多实例 & 高可用策略

Server 可配置:"10.0.1.10:6379,10.0.1.11:6379"

  • 发生网络型异常(Socket/IO)时自动切换下一个地址
  • ShieldingTime 控制不可用节点屏蔽窗口
  • 一段时间后自动尝试回切主节点

扩展包 (Extensions)

NewLife.Redis.Extensions 提供 ASP.NET Core 集成:

  • IDistributedCache 后端实现
  • IDataProtection 密钥存储

安装:

dotnet add package NewLife.Redis.Extensions

示例:

builder.Services.AddRedisCaching(options =>
{
    options.Server = "127.0.0.1:6379";
    options.Password = "pass";
});

与 MemoryCache 的协同

建议以 ICache 编程:小数据或临时热点 → MemoryCache;规模上升/跨进程共享 → 切换 Redis/FullRedis,无须修改业务逻辑。


常见问题 FAQ

Q: 是否支持发布订阅 / Stream / Cluster?
A: 基础代码已具备扩展点,发布订阅/更多结构可在 FullRedis 扩展层或后续版本完善。Cluster 分片可通过多实例 + Key 路由策略实现。
Q: 如何处理反序列化失败?
A: TryGetValue 返回是否存在键,即使反序列化失败仍可感知,用于容错与告警。
Q: 如何降低大 Value 带来的慢查询?
A: 拆分结构 + 批量 + 二进制编码 + 控制 MaxMessageSize(默认 1MB)。


路线图 Roadmap

  • [*] 发布订阅友好封装(模式订阅 / 回调)
  • 更完善的分布式锁 / RedLock 支持
  • [*] Stream / 消费组封装
  • 更灵活的二进制/Span Encoder 示例
  • 内置指标导出(Prometheus 适配器)
  • 单测覆盖率提升 & BenchmarkDotNet 场景脚本化

欢迎通过 Issue / PR 参与投票或补充需求。


新生命项目矩阵

(节选) | 项目 | 说明 | | ---- | ---- | | NewLife.Core | 核心库,日志/配置/缓存/序列化/APM | | NewLife.XCode | 大数据 ORM,百亿级 + 分表 + 读写分离 | | NewLife.Net | 超高性能网络库(千万级吞吐) | | Stardust | 分布式服务/配置/注册/发布中心 | | AntJob | 分布式计算 & 调度平台 | | NewLife.RocketMQ | RocketMQ 纯托管客户端 | | ... | 更多见官网与组织首页 |

完整矩阵、企业级解决方案与商业支持请访问:https://newlifex.com


贡献指南 & 社区

  1. 提交前阅读仓库 .github/copilot-instructions.md(编码规范 & 审核清单)
  2. 提交 PR:保持最小变更、添加必要注释与测试说明
  3. Issue:提供版本、运行环境、最小复现场景

社区:QQ群 1600800 / 1600838 ;GitHub Discussions / Issues 参与答疑。


许可证

MIT License。可自由商用 / 修改 / 再发行(无需额外授权)。保留版权声明即可。


新生命开发团队

XCode

团队自 2002 年迄今,维护 80+ .NET / IoT / 分布式相关开源项目,NuGet 累计下载超 400 万。产品与组件已广泛服务于电力、物流、工业控制、教育、通信、文博等行业。
网站:https://newlifex.com | 开源:https://github.com/NewLifeX
微信公众号:

智能大石头


若本文档未覆盖你的使用场景,欢迎提交 Issue 补充;一起让文档更完善!

No packages depend on NewLife.Redis.

改进返回多行数据的大响应包支持

.NET Framework 4.5

.NET Framework 4.6.1

.NET Standard 2.0

.NET Standard 2.1

Version Downloads Last updated
6.3.2025.820-beta1830 0 08/20/2025
6.3.2025.816-beta1657 1 08/18/2025
6.3.2025.801 4 08/01/2025
6.3.2025.801-beta0244 2 08/06/2025
6.3.2025.723-beta0606 4 07/25/2025
6.3.2025.701 5 07/02/2025
6.3.2025.701-beta0404 4 07/02/2025
6.2.2025.629-beta0441 5 07/02/2025
6.2.2025.625-beta0722 4 06/27/2025
6.2.2025.623-beta1320 4 06/25/2025
6.2.2025.601 5 06/06/2025
6.2.2025.601-beta0825 6 06/07/2025
6.2.2025.505-beta1201 7 05/07/2025
6.2.2025.503 7 05/08/2025
6.2.2025.503-beta1516 8 05/07/2025
6.1.2025.426-beta0321 7 04/29/2025
6.1.2025.416-beta1257 6 04/28/2025
6.1.2025.415-beta1726 6 04/29/2025
6.1.2025.411 9 04/13/2025
6.1.2025.411-beta1712 9 04/13/2025
6.1.2025.401 8 04/04/2025
6.1.2025.401-beta0759 11 04/04/2025
6.1.2025.329-beta1226 10 03/30/2025
6.1.2025.328-beta0933 11 03/30/2025
6.1.2025.301 15 03/02/2025
6.1.2025.301-beta0150 12 03/05/2025
6.1.2025.225-beta0533 12 03/05/2025
6.1.2025.224-beta1147 11 03/04/2025
6.1.2025.211-beta1050 10 03/16/2025
6.1.2025.209 13 03/05/2025
6.1.2025.208-beta1528 10 03/16/2025
6.1.2025.202 9 03/05/2025
6.1.2025.202-beta0416 13 03/16/2025
6.1.2025.114-beta0537 15 01/24/2025
6.1.2025.109-beta1738 9 03/16/2025
6.0.2025.103-beta1037 12 01/13/2025
6.0.2025.103-beta0843 13 01/20/2025
6.0.2025.101 13 01/24/2025
6.0.2025.101-beta0851 12 01/21/2025
6.0.2024.1225-beta1617 14 12/29/2024
6.0.2024.1211-beta0604 20 12/24/2024
6.0.2024.1205 16 12/19/2024
6.0.2024.1205-beta1612 7 05/14/2025
6.0.2024.1202 15 12/13/2024
6.0.2024.1125-beta1236 17 12/04/2024
6.0.2024.1125-beta1221 19 12/08/2024
6.0.2024.1116-beta0353 16 12/24/2024
6.0.2024.1113-beta0607 16 12/17/2024
6.0.2024.1101 16 12/13/2024
6.0.2024.1101-beta1025 19 12/12/2024
6.0.2024.1031-beta0120 20 12/09/2024
6.0.2024.1030-beta0959 17 12/17/2024
6.0.2024.1022-beta1409 20 12/08/2024
6.0.2024.1017-beta0335 17 12/10/2024
6.0.2024.1015-beta1005 18 12/12/2024
6.0.2024.1014-beta0223 20 12/12/2024
6.0.2024.1009-beta0730 19 12/05/2024
6.0.2024.1007-beta0814 17 12/09/2024
6.0.2024.1006 17 12/11/2024
6.0.2024.1006-beta1712 15 12/09/2024
6.0.2024.925-beta1105 19 12/08/2024
6.0.2024.921-beta0817 16 12/12/2024
6.0.2024.919-beta0039 15 12/11/2024
6.0.2024.917-beta0105 14 12/10/2024
6.0.2024.829-beta1442 17 12/04/2024
6.0.2024.829-beta0325 13 12/19/2024
6.0.2024.827-beta0103 18 12/07/2024
5.7.2024.830-beta2338 16 12/12/2024
5.7.2024.801 17 12/13/2024
5.7.2024.709 18 12/18/2024
5.7.2024.602 14 12/19/2024
5.7.2024.602-beta0456 21 12/11/2024
5.6.2024.526-beta1546 21 12/04/2024
5.6.2024.522-beta0209 22 05/31/2024
5.6.2024.508 23 05/31/2024
5.6.2024.508-beta1249 16 05/31/2024
5.6.2024.420-beta0005 18 12/11/2024
5.6.2024.419-beta0858 18 05/31/2024
5.6.2024.411-beta0755 18 05/31/2024
5.6.2024.409-beta0751 17 05/31/2024
5.6.2024.409-beta0725 18 05/31/2024
5.6.2024.403-beta0631 17 05/31/2024
5.6.2024.402 20 05/31/2024
5.6.2024.402-beta1733 16 05/31/2024
5.6.2024.319-beta0028 26 05/31/2024
5.6.2024.317-beta2316 18 05/31/2024
5.6.2024.307-beta0845 19 05/31/2024
5.6.2024.304 19 05/31/2024
5.6.2024.304-beta1306 18 05/31/2024
5.6.2024.223-beta1349 14 05/31/2024
5.6.2024.203 21 05/31/2024
5.6.2024.131-beta1503 18 05/31/2024
5.6.2024.123-beta0118 18 05/31/2024
5.6.2024.105 20 05/31/2024
5.5.2023.1213-beta0813 19 12/10/2024
5.5.2023.1213-beta0308 19 12/13/2024
5.5.2023.1201 18 05/31/2024
5.5.2023.1201-beta0625 18 12/04/2024
5.5.2023.1129-beta1059 17 12/03/2024
5.5.2023.1129-beta1042 19 12/06/2024
5.5.2023.1129-beta0951 18 12/03/2024
5.5.2023.1129-beta0929 19 12/02/2024
5.5.2023.1128-beta0013 21 12/03/2024
5.5.2023.1116-beta0006 20 12/03/2024
5.5.2023.1109-beta0627 24 12/02/2024
5.5.2023.1103-beta1404 20 12/02/2024
5.5.2023.1102 20 12/18/2023
5.5.2023.1101-beta1333 17 12/03/2024
5.5.2023.1031-beta0703 20 12/02/2024
5.5.2023.1010-beta0839 15 12/03/2024
5.5.2023.1008-beta0421 18 12/02/2024
5.5.2023.1001 19 05/31/2024
5.5.2023.928-beta0019 19 05/31/2024
5.5.2023.915-beta0733 16 05/31/2024
5.5.2023.828-beta1607 19 05/31/2024
5.5.2023.803 21 05/31/2024
5.5.2023.803-beta0326 16 05/31/2024
5.4.2023.722-beta1145 19 05/31/2024
5.4.2023.707-beta0321 24 05/31/2024
5.4.2023.624-beta0342 19 05/31/2024
5.4.2023.606-beta1138 17 05/31/2024
5.4.2023.604-beta1121 16 05/31/2024
5.4.2023.601 21 05/31/2024
5.4.2023.601-beta1704 17 05/31/2024
5.3.2023.520-beta0150 19 05/31/2024
5.3.2023.520-beta0002 17 05/31/2024
5.3.2023.512 24 05/31/2024
5.3.2023.512-beta1540 20 05/31/2024
5.3.2023.512-beta1004 21 05/31/2024
5.3.2023.511-beta0332 16 05/31/2024
5.3.2023.504-beta0359 19 05/31/2024
5.3.2023.421-beta0320 19 12/12/2024
5.3.2023.416-beta1213 18 05/31/2024
5.3.2023.408-beta0106 19 05/31/2024
5.3.2023.405-beta0134 20 05/31/2024
5.3.2023.401-beta1729 18 05/31/2024
5.2.2023.328-beta1250 20 05/31/2024
5.2.2023.318-beta1402 20 05/31/2024
5.2.2023.318-beta0211 23 05/31/2024
5.2.2023.313-beta1534 18 05/31/2024
5.2.2023.312-beta1044 18 05/31/2024
5.2.2023.311-beta1023 21 05/31/2024
5.2.2023.307-beta1030 16 05/31/2024
5.2.2023.307-beta0136 19 05/31/2024
5.2.2023.307-beta0130 18 05/31/2024
5.2.2023.304-beta0111 16 05/31/2024
5.2.2023.301 23 12/03/2024
5.2.2023.301-beta0441 17 05/31/2024
5.2.2023.301-beta0436 18 05/31/2024
5.1.2023.225-beta0127 24 05/31/2024
5.1.2023.214-beta0217 19 05/31/2024
5.1.2023.214-beta0205 20 05/31/2024
5.1.2023.207-beta0755 19 05/31/2024
5.1.2023.204-beta1040 22 05/31/2024
5.1.2023.203 18 05/31/2024
5.1.2023.203-beta1448 22 05/31/2024
5.1.2023.106-beta1424 20 05/31/2024
5.1.2023.101 22 05/31/2024
5.1.2023.101-beta0245 20 05/31/2024
5.0.2022.1201 22 05/31/2024
5.0.2022.1201-beta1317 18 12/14/2024
5.0.2022.1201-beta1250 19 12/10/2024
5.0.2022.1101 19 05/31/2024
5.0.2022.1101-beta0802 17 12/02/2024
5.0.2022.1017-beta1058 18 12/10/2024
5.0.2022.1016-beta0306 19 12/13/2024
5.0.2022.1014-beta0959 20 12/10/2024
5.0.2022.901 20 05/31/2024
5.0.2022.901-beta0617 20 05/31/2024
5.0.2022.813-beta1456 16 12/13/2024
5.0.2022.810-beta0542 19 12/07/2024
4.1.2022.809-beta0003 22 12/19/2024
4.1.2022.801 14 05/31/2024
4.1.2022.801-beta0124 21 12/09/2024
4.1.2022.704-beta0836 16 12/14/2024
4.1.2022.701 23 05/31/2024
4.1.2022.701-beta1330 20 12/09/2024
4.1.2022.609-beta1431 17 12/03/2024
4.1.2022.603 22 05/31/2024
4.1.2022.603-beta1006 23 12/08/2024
4.1.2022.501 23 05/31/2024
4.1.2022.501-beta0221 23 12/04/2024
4.0.2022.415-beta0501 25 12/09/2024
4.0.2022.401 21 05/31/2024
4.0.2022.320-beta0642 17 12/12/2024
4.0.2022.203 23 05/31/2024
3.9.2021.1216-beta1 16 05/31/2024
3.9.2021.1204 17 05/31/2024
3.9.2021.1001 17 05/31/2024
3.9.2021.709 18 05/31/2024
3.9.2021.629-beta1 21 05/31/2024
3.9.2021.505 18 05/31/2024
3.9.2021.427-beta2 19 05/31/2024
3.9.2021.407 17 05/31/2024
3.8.2021.303 19 05/31/2024
3.8.2021.202 18 05/31/2024
3.8.2021.115-beta1 23 05/31/2024
3.8.2021.101 19 05/31/2024
3.8.2020.1223-beta1 21 05/31/2024
3.8.2020.1201 25 05/31/2024
3.8.2020.1101 21 05/31/2024
3.8.2020.1023-beta3 15 05/31/2024
3.8.2020.1021-beta2 17 05/31/2024
3.8.2020.1018-beta 19 05/31/2024
3.8.2020.1002 20 05/31/2024
3.8.2020.930-rc4 17 05/31/2024
3.8.2020.930-rc3 26 05/31/2024
3.8.2020.927-rc2 17 05/31/2024
3.8.2020.918-beta3 18 05/31/2024
3.8.2020.914-beta 19 05/31/2024
3.8.2020.904-beta 15 05/31/2024
3.8.2020.901 18 05/31/2024
3.7.2020.822-beta4 20 05/31/2024
3.7.2020.819-beta3 22 05/31/2024
3.7.2020.809-beta2 19 05/31/2024
3.7.2020.806-beta 22 05/31/2024
3.7.2020.717-beta 21 05/31/2024
3.7.2020.701 21 05/31/2024
3.6.2020.601 24 05/31/2024
3.6.2020.308 18 05/31/2024
3.5.2020.209 26 05/31/2024
3.4.2020.101 19 05/31/2024
3.3.2019.1117 21 05/31/2024
3.3.2019.707 26 05/31/2024
3.2.2019.618 18 05/31/2024
3.2.2019.602 23 05/31/2024
3.1.2019.513 17 05/31/2024
3.0.2019.320 19 05/31/2024
3.0.2019.310 17 05/31/2024
2.1.6951.393 20 05/31/2024
2.1.6871.1098 20 05/31/2024
2.1.6839.36539 18 05/31/2024
2.0.6816.1474 18 05/31/2024
1.0.6441.4282 19 05/31/2024