NewLife.Redis.Extensions 5.5.2023.1128-beta0014

This is a prerelease version of NewLife.Redis.Extensions.
There is a newer version of this package available.
See the version list below for details.
dotnet add package NewLife.Redis.Extensions --version 5.5.2023.1128-beta0014
                    
NuGet\Install-Package NewLife.Redis.Extensions -Version 5.5.2023.1128-beta0014
                    
This command is intended to be used within the Package Manager Console in Visual Studio, as it uses the NuGet module's version of Install-Package.
<PackageReference Include="NewLife.Redis.Extensions" Version="5.5.2023.1128-beta0014" />
                    
For projects that support PackageReference, copy this XML node into the project file to reference the package.
<PackageVersion Include="NewLife.Redis.Extensions" Version="5.5.2023.1128-beta0014" />
                    
Directory.Packages.props
<PackageReference Include="NewLife.Redis.Extensions" />
                    
Project file
For projects that support Central Package Management (CPM), copy this XML node into the solution Directory.Packages.props file to version the package.
paket add NewLife.Redis.Extensions --version 5.5.2023.1128-beta0014
                    
#r "nuget: NewLife.Redis.Extensions, 5.5.2023.1128-beta0014"
                    
#r directive can be used in F# Interactive and Polyglot Notebooks. Copy this into the interactive tool or source code of the script to reference the package.
#addin nuget:?package=NewLife.Redis.Extensions&version=5.5.2023.1128-beta0014&prerelease
                    
Install NewLife.Redis.Extensions as a Cake Addin
#tool nuget:?package=NewLife.Redis.Extensions&version=5.5.2023.1128-beta0014&prerelease
                    
Install NewLife.Redis.Extensions as a Cake Tool

NewLife.Redis - Redis客户端组件

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

[English]

NewLife.Redis 是一个Redis客户端组件,以高性能处理大数据实时计算为目标。
Redis协议基础实现Redis/RedisClient位于X组件,本库为扩展实现,主要增加列表结构、哈希结构、队列等高级功能。

源码: https://github.com/NewLifeX/NewLife.Redis
Nuget:NewLife.Redis
教程:https://newlifex.com/core/redis


特性

  • 2017年在ZTO大数据实时计算广泛应用,200多个Redis实例稳定工作一年多,每天处理近1亿条包裹数据,日均调用量80亿次
  • 低延迟,Get/Set操作平均耗时200~600us(含往返网络通信)
  • 大吞吐,自带连接池,最大支持100000并发
  • 高性能,支持二进制序列化

Redis经验分享

  • 在Linux上多实例部署,实例个数等于处理器个数,各实例最大内存直接为本机物理内存,避免单个实例内存撑爆
  • 把海量数据(10亿+)根据key哈希(Crc16/Crc32)存放在多个实例上,读写性能成倍增长
  • 采用二进制序列化,而非常见Json序列化
  • 合理设计每一对Key的Value大小,包括但不限于使用批量获取,原则是让每次网络包控制在1.4k字节附近,减少通信次数
  • Redis客户端的Get/Set操作平均耗时200~600us(含往返网络通信),以此为参考评估网络环境和Redis客户端组件
  • 使用管道Pipeline合并一批命令
  • Redis的主要性能瓶颈是序列化、网络带宽和内存大小,滥用时处理器也会达到瓶颈
  • 其它可查优化技巧 以上经验,源自于300多个实例4T以上空间一年多稳定工作的经验,并按照重要程度排了先后顺序,可根据场景需要酌情采用!

推荐用法

推荐使用单例模式,Redis内部有连接池并且支持多线程并发访问

public static class RedisHelper
{
    /// <summary>
    /// Redis实例
    /// </summary>
    public static FullRedis redisConnection { get; set; } = new FullRedis("127.0.0.1:6379", "123456", 4);
}

Console.WriteLine(RedisHelper.redisConnection.Keys);

基础 Redis

Redis实现标准协议以及基础字符串操作,完整实现由独立开源项目NewLife.Redis提供。
采取连接池加同步阻塞架构,具有超低延迟(200~600us)以及超高吞吐量的特点。
在物流行业大数据实时计算中广泛应有,经过日均100亿次调用量验证。

// 实例化Redis,默认端口6379可以省略,密码有两种写法
//var rds = new FullRedis("127.0.0.1", null, 7);
var rds = new FullRedis("127.0.0.1:6379", "pass", 7);
//var rds = new FullRedis();
//rds.Init("server=127.0.0.1:6379;password=pass;db=7");
rds.Log = XTrace.Log;

基本操作

在基本操作之前,我们先做一些准备工作:

  • 新建控制台项目,并在入口函数开头加上 XTrace.UseConsole(); ,这是为了方便查看调试日志
  • 具体测试代码之前,需要加上前面MemoryCache或Redis的实例化代码
  • 准备一个模型类User
class User
{
    public String Name { get; set; }
    public DateTime CreateTime { get; set; }
}

添删改查:

var rds = new FullRedis("127.0.0.1", null, 7);
rds.Log = XTrace.Log;
rds.ClientLog = XTrace.Log; // 调试日志。正式使用时注释
var user = new User { Name = "NewLife", CreateTime = DateTime.Now };
rds.Set("user", user, 3600);
var user2 = rds.Get<User>("user");
XTrace.WriteLine("Json: {0}", user2.ToJson());
XTrace.WriteLine("Json: {0}", rds.Get<String>("user"));
if (rds.ContainsKey("user")) XTrace.WriteLine("存在!");
rds.Remove("user");

执行结果:

14:14:25.990  1 N - SELECT 7
14:14:25.992  1 N - => OK
14:14:26.008  1 N - SETEX user 3600 [53]
14:14:26.021  1 N - => OK
14:14:26.042  1 N - GET user
14:14:26.048  1 N - => [53]
14:14:26.064  1 N - GET user
14:14:26.065  1 N - => [53]
14:14:26.066  1 N - Json: {"Name":"NewLife","CreateTime":"2018-09-25 14:14:25"}
14:14:26.067  1 N - EXISTS user
14:14:26.068  1 N - => 1
14:14:26.068  1 N - 存在!
14:14:26.069  1 N - DEL user
14:14:26.070  1 N - => 1

保存复杂对象时,默认采用Json序列化,所以上面可以按字符串把结果取回来,发现正是Json字符串。
Redis的strings,实质上就是带有长度前缀的二进制数据,[53]表示一段53字节长度的二进制数据。

集合操作

GetAll/SetAll 在Redis上是很常用的批量操作,同时获取或设置多个key,一般有10倍以上吞吐量。

批量操作:

var rds = new FullRedis("127.0.0.1", null, 7);
rds.Log = XTrace.Log;
rds.ClientLog = XTrace.Log; // 调试日志。正式使用时注释
var dic = new Dictionary<String, Object>
{
    ["name"] = "NewLife",
    ["time"] = DateTime.Now,
    ["count"] = 1234
};
rds.SetAll(dic, 120);

var vs = rds.GetAll<String>(dic.Keys);
XTrace.WriteLine(vs.Join(",", e => $"{e.Key}={e.Value}"));

执行结果:

MSET name NewLife time 2018-09-25 15:56:26 count 1234
=> OK
EXPIRE name 120
EXPIRE time 120
EXPIRE count 120
MGET name time count
name=NewLife,time=2018-09-25 15:56:26,count=1234

集合操作里面还有 GetList/GetDictionary/GetQueue/GetSet 四个类型集合,分别代表Redis的列表、哈希、队列、Set集合等。
基础版Redis不支持这四个集合,完整版NewLife.Redis支持,MemoryCache则直接支持。

高级操作

  • Add 添加,当key不存在时添加,已存在时返回false。
  • Replace 替换,替换已有值为新值,返回旧值。
  • Increment 累加,原子操作
  • Decrement 递减,原子操作

高级操作:

var rds = new FullRedis("127.0.0.1", null, 7);
rds.Log = XTrace.Log;
rds.ClientLog = XTrace.Log; // 调试日志。正式使用时注释
var flag = rds.Add("count", 5678);
XTrace.WriteLine(flag ? "Add成功" : "Add失败");
var ori = rds.Replace("count", 777);
var count = rds.Get<Int32>("count");
XTrace.WriteLine("count由{0}替换为{1}", ori, count);

rds.Increment("count", 11);
var count2 = rds.Decrement("count", 10);
XTrace.WriteLine("count={0}", count2);

执行结果:

SETNX count 5678
=> 0
Add失败
GETSET count 777
=> 1234
GET count
=> 777
count由1234替换为777
INCRBY count 11
=> 788
DECRBY count 10
=> 778
count=778

性能测试

Bench 会分根据线程数分多组进行添删改压力测试。
rand 参数,是否随机产生key/value。
batch 批大小,分批执行读写操作,借助GetAll/SetAll进行优化。

Redis默认设置AutoPipeline=100,无分批时打开管道操作,对添删改优化。

Redis的兄弟姐妹

Redis实现ICache接口,它的孪生兄弟MemoryCache,内存缓存,千万级吞吐率。
各应用强烈建议使用ICache接口编码设计,小数据时使用MemoryCache实现;
数据增大(10万)以后,改用Redis实现,不需要修改业务代码。

新生命项目矩阵

各项目默认支持net7.0/netstandard2.1/netstandard2.0/net4.61,旧版(2022.1225)支持net4.5/net4.0/net2.0

项目 年份 说明
基础组件 支撑其它中间件以及产品项目
NewLife.Core 2002 核心库,日志、配置、缓存、网络、序列化、APM性能追踪
NewLife.XCode 2005 大数据中间件,单表百亿级,MySql/SQLite/SqlServer/Oracle/TDengine/达梦,自动分表
NewLife.Net 2005 网络库,单机千万级吞吐率(2266万tps),单机百万级连接(400万Tcp)
NewLife.Remoting 2011 RPC通信框架,内网高吞吐或物联网硬件设备场景
NewLife.Cube 2010 魔方快速开发平台,集成了用户权限、SSO登录、OAuth服务端等,单表100亿级项目验证
NewLife.Agent 2008 服务管理组件,把应用安装成为操作系统守护进程,Windows服务、Linux的Systemd
NewLife.Zero 2020 Zero零代脚手架,基于NewLife组件生态的项目模板,Web、WebApi、Service
中间件 对接知名中间件平台
NewLife.Redis 2017 Redis客户端,微秒级延迟,百万级吞吐,丰富的消息队列,百亿级数据量项目验证
NewLife.RocketMQ 2018 RocketMQ纯托管客户端,支持Apache RocketMQ和阿里云消息队列,十亿级项目验
NewLife.MQTT 2019 物联网消息协议,MqttClient/MqttServer,客户端支持阿里云物联网
NewLife.IoT 2022 IoT标准库,定义物联网领域的各种通信协议标准规范
NewLife.Modbus 2022 ModbusTcp/ModbusRTU/ModbusASCII,基于IoT标准库实现,支持IoT平台和IoTEdge
NewLife.Siemens 2022 西门子PLC协议,基于IoT标准库实现,支持IoT平台和IoTEdge
NewLife.Map 2022 地图组件库,封装百度地图、高德地图和腾讯地图
NewLife.IP 2022 IP地址库,IP地址转物理地址
产品平台 产品平台级,编译部署即用,个性化自定义
AntJob 2019 蚂蚁调度,分布式大数据计算平台(实时/离线),蚂蚁搬家分片思想,万亿级数据量项目验证
Stardust 2018 星尘,分布式服务平台,节点管理、APM监控中心、配置中心、注册中心、发布中心
NewLife.ERP 2021 企业ERP,产品管理、客户管理、销售管理、供应商管理
CrazyCoder 2006 码神工具,众多开发者工具,网络、串口、加解密、正则表达式、Modbus
XProxy 2005 产品级反向代理,NAT代理、Http代理
HttpMeter 2022 Http压力测试工具
GitCandy 2015 Git源代码管理系统
SmartOS 2014 嵌入式操作系统,完全独立自主,支持ARM Cortex-M芯片架构
SmartA2 2019 嵌入式工业计算机,物联网边缘网关,高性能.NET6主机,应用于工业、农业、交通、医疗
菲凡物联FIoT 2020 物联网整体解决方案,建筑、环保、农业,软硬件及大数据分析一体化,单机十万级点位项目验证
NewLife.UWB 2020 厘米级(10~20cm)高精度室内定位,软硬件一体化,与其它系统联动,大型展厅项目验证

新生命开发团队

XCode

新生命团队(NewLife)成立于2002年,是新时代物联网行业解决方案提供者,致力于提供软硬件应用方案咨询、系统架构规划与开发服务。
团队主导的开源NewLife系列组件已被广泛应用于各行业,Nuget累计下载量高达60余万次。
团队开发的大数据核心组件NewLife.XCode、蚂蚁调度计算平台AntJob、星尘分布式平台Stardust、缓存队列组件NewLife.Redis以及物联网平台NewLife.IoT,均成功应用于电力、高校、互联网、电信、交通、物流、工控、医疗、文博等行业,为客户提供了大量先进、可靠、安全、高质量、易扩展的产品和系统集成服务。

我们将不断通过服务的持续改进,成为客户长期信赖的合作伙伴,通过不断的创新和发展,成为国内优秀的IT服务供应商。

新生命团队始于2002年,部分开源项目具有20年以上漫长历史,源码库保留有2010年以来所有修改记录
网站:https://newlifex.com
开源:https://github.com/newlifex
QQ群:1600800/1600838
微信公众号:
智能大石头

Product Compatible and additional computed target framework versions.
.NET net5.0 is compatible.  net5.0-windows was computed.  net6.0 is compatible.  net6.0-android was computed.  net6.0-ios was computed.  net6.0-maccatalyst was computed.  net6.0-macos was computed.  net6.0-tvos was computed.  net6.0-windows was computed.  net7.0 is compatible.  net7.0-android was computed.  net7.0-ios was computed.  net7.0-maccatalyst was computed.  net7.0-macos was computed.  net7.0-tvos was computed.  net7.0-windows was computed.  net8.0 is compatible.  net8.0-android was computed.  net8.0-browser was computed.  net8.0-ios was computed.  net8.0-maccatalyst was computed.  net8.0-macos was computed.  net8.0-tvos was computed.  net8.0-windows was computed.  net9.0 was computed.  net9.0-android was computed.  net9.0-browser was computed.  net9.0-ios was computed.  net9.0-maccatalyst was computed.  net9.0-macos was computed.  net9.0-tvos was computed.  net9.0-windows was computed. 
.NET Core netcoreapp3.1 is compatible. 
Compatible target framework(s)
Included target framework(s) (in package)
Learn more about Target Frameworks and .NET Standard.

NuGet packages (1)

Showing the top 1 NuGet packages that depend on NewLife.Redis.Extensions:

Package Downloads
CodeRule

业务流水号规则生成器,便于快速生成流水号

GitHub repositories

This package is not used by any popular GitHub repositories.

Version Downloads Last updated
6.1.2025.426-beta0321 0 4/26/2025
6.1.2025.416-beta1257 167 4/16/2025
6.1.2025.415-beta1726 175 4/15/2025
6.1.2025.411 136 4/11/2025
6.1.2025.411-beta1712 107 4/11/2025
6.1.2025.401-beta0759 137 4/1/2025
6.1.2025.329-beta1226 89 3/29/2025
6.1.2025.328-beta0933 114 3/28/2025
6.1.2025.301 161 3/1/2025
6.1.2025.301-beta0150 77 3/1/2025
6.1.2025.225-beta0533 89 2/25/2025
6.1.2025.224-beta1147 87 2/24/2025
6.1.2025.211-beta1050 121 2/11/2025
6.1.2025.209 275 2/9/2025
6.1.2025.208-beta1528 91 2/8/2025
6.1.2025.202 150 2/2/2025
6.1.2025.202-beta0416 95 2/2/2025
6.1.2025.114-beta0537 96 1/14/2025
6.1.2025.109-beta1738 76 1/9/2025
6.0.2025.103-beta1037 118 1/3/2025
6.0.2025.103-beta0843 105 1/3/2025
6.0.2025.101 174 1/1/2025
6.0.2025.101-beta0851 85 1/1/2025
6.0.2024.1225-beta1617 105 12/25/2024
6.0.2024.1211-beta0604 87 12/11/2024
6.0.2024.1205 195 12/5/2024
6.0.2024.1205-beta1612 85 12/5/2024
6.0.2024.1202 4,993 12/2/2024
6.0.2024.1125-beta1236 86 11/25/2024
6.0.2024.1125-beta1221 80 11/25/2024
6.0.2024.1116-beta0354 82 11/16/2024
6.0.2024.1113-beta0608 78 11/13/2024
6.0.2024.1101 311 11/1/2024
6.0.2024.1101-beta1025 77 11/1/2024
6.0.2024.1031-beta0120 87 10/31/2024
6.0.2024.1030-beta0959 75 10/30/2024
6.0.2024.1022-beta1410 82 10/22/2024
6.0.2024.1017-beta0335 84 10/17/2024
6.0.2024.1015-beta1005 76 10/15/2024
6.0.2024.1014-beta0223 81 10/14/2024
6.0.2024.1009-beta0730 83 10/9/2024
6.0.2024.1007-beta0814 86 10/7/2024
6.0.2024.1006 201 10/6/2024
6.0.2024.1006-beta1712 80 10/6/2024
6.0.2024.925-beta1105 84 9/25/2024
6.0.2024.921-beta0817 94 9/21/2024
6.0.2024.919-beta0039 89 9/19/2024
6.0.2024.917-beta0105 84 9/17/2024
6.0.2024.829-beta1443 86 8/29/2024
6.0.2024.829-beta0325 83 8/29/2024
6.0.2024.827-beta0104 84 8/27/2024
5.7.2024.830-beta2338 91 8/30/2024
5.7.2024.801 347 8/1/2024
5.7.2024.801-beta1039 64 8/1/2024
5.5.2024.709 267 7/9/2024
5.5.2024.630-beta0606 98 6/30/2024
5.5.2024.617-beta1505 98 6/17/2024
5.5.2024.602 130 6/2/2024
5.5.2024.602-beta0456 109 6/2/2024
5.5.2024.526-beta1546 104 5/26/2024
5.5.2024.522-beta0209 91 5/22/2024
5.5.2024.508 316 5/8/2024
5.5.2024.508-beta1249 109 5/8/2024
5.5.2024.420-beta0006 101 4/20/2024
5.5.2024.419-beta0858 102 4/19/2024
5.5.2024.411-beta0755 161 4/11/2024
5.5.2024.409-beta0751 101 4/9/2024
5.5.2024.409-beta0726 99 4/9/2024
5.5.2024.403-beta0631 109 4/3/2024
5.5.2024.402 215 4/2/2024
5.5.2024.402-beta1733 95 4/2/2024
5.5.2024.319-beta0028 122 3/19/2024
5.5.2024.317-beta2316 112 3/17/2024
5.5.2024.307-beta0845 99 3/7/2024
5.5.2024.304 372 3/4/2024
5.5.2024.304-beta1306 105 3/4/2024
5.5.2024.223-beta1349 182 2/23/2024
5.5.2024.203 230 2/3/2024
5.5.2024.203-beta1654 76 2/3/2024
5.5.2024.131-beta1504 110 1/31/2024
5.5.2024.123-beta0119 87 1/23/2024
5.5.2024.105 410 1/5/2024
5.5.2024.105-beta0543 113 1/5/2024
5.5.2024.105-beta0302 112 1/5/2024
5.5.2024.104 160 1/4/2024
5.5.2024.104-beta0553 134 1/4/2024
5.5.2024.101 298 1/1/2024
5.5.2024.101-beta0946 110 1/1/2024
5.5.2023.1213-beta0814 139 12/13/2023
5.5.2023.1213-beta0309 113 12/13/2023
5.5.2023.1201 546 12/1/2023
5.5.2023.1201-beta0625 121 12/1/2023
5.5.2023.1129-beta1059 156 11/29/2023
5.5.2023.1129-beta1042 112 11/29/2023
5.5.2023.1129-beta0951 111 11/29/2023
5.5.2023.1129-beta0929 108 11/29/2023
5.5.2023.1128-beta0014 124 11/28/2023
5.5.2023.1116-beta0006 120 11/16/2023
5.5.2023.1109-beta0627 112 11/9/2023
5.5.2023.1103-beta1404 124 11/3/2023
5.5.2023.1102 444 11/2/2023
5.5.2023.1101-beta1333 96 11/1/2023
5.5.2023.1031-beta0703 98 10/31/2023
5.5.2023.1010-beta0839 109 10/10/2023
5.5.2023.1008-beta0422 122 10/8/2023
5.5.2023.1001 408 10/1/2023
5.5.2023.928-beta0019 112 9/28/2023

新增数据保护IDataProtection