前言:

前几天,点开自己的博客,看了一下 CYQ.Data V5系列 都有哪些文章,

发现了一篇2019年写的:CYQ.Data 对于分布式缓存Redis、MemCache高可用的改进及性能测试,于是点进去看了看。

感觉文章中有些表述存有问题,不过不是重点。

重点,看了里面的测试结论,如果四五年过去了,CYQ.Data 低调的更新,有没有进步呢?

为了和之前的版本进行对比,好在当年有留下代码,就直接拿当年的代码来测试一下。

下面就来重新看一下新的测试结果:

测试环境:

本次测试为.Net Windown 版本,下次再测试.Net Core Linux 版本。

Win11 系统:6核16G内存

Redis 版本:redis_version:3.2.100

由于单机测试,受运行程序和Redis自身程序等多综合环境影响,测试结果仅供参考,用娱乐的心态看看即可。

测试代码:

见上一篇文章的测试代码:点击下载

CYQ.Data Redis 测试结果:

使用  CYQ.Data 当前最新版本:V5.9.2.7

VS2022 中直接运行 Release 版本:

直接运行编绎的exe程序结果:

StackExchange.Redis 测试结果:

使用 StackExchange.Redis 当前最新版本:V2.7.27

考虑到 StackExchange.Redis 默认是单线程,因此提前设置最低线程池,不然会抛异常。

 ThreadPool.SetMinThreads(128, 128);

VS2022 中直接运行 Release 版本:

运行编绎后程序 exe 结果:

redis-benchmark.exe 测试结果:

运行结果1:

运行结果2:

运行结果3:

运行结果4:

总结:

具体的性能指标,应该结合自身业务和生产环境,测试出适合自身要求的指标。

下面就来看看总结词吧:

1、Redis 自带测试工具

单线程时,能跑到2w/s,为啥6核下,最高也是6w/s出头,而不是2W*6=12W呢?

Redis 是一个单线程的内存数据库,它的性能受限于单个 CPU 核心的处理能力。即使在多核处理器上运行 Redis,它也只能利用其中一个核心进行处理,所以无法直接通过简单地将单核性能乘以核心数来计算多核性能。

在一个六核处理器上运行 Redis,虽然有多个核心可供利用,但 Redis 本身仍然是单线程的,因此最高的吞吐量受限于单个核心的性能。虽然可以同时处理多个请求,但每个请求仍然只能在一个核心上依次执行,不能完全实现性能的线性增长。

此外,Redis 在处理请求时还会涉及到锁竞争、线程切换等开销,这些因素也会限制其在多核处理器上的性能表现。因此,尽管在多核处理器上运行 Redis 会比单核处理器有一定的性能提升,但不会达到简单地将单核性能乘以核心数的增长幅度。

2、StackExchange.Redis 测试结果总结:

在VS2002中启动运行时,单线程时,性能特别低,只有4000/s上下,这不禁让我想起上一份测试的结果,是不是也是受这种运行模式影响。

在直接运行exe程序,单线程时,在1W/s左右,8线程下到5.2w/s出头。

16线程之后,突飞猛进了,突破 Redis自身极限,达到10-20w/s ?

听说StackExchange.Redis 从2.X 版本后,重构了代码,在资源管够的情况下,将代码从单条提交串行转批量提交,因此就有了这种测试结果。

3、CYQ.Data Redis 测试结果总结:

在VS中启动运行,和直接运行启动,两者性能相差不大。

单线程时,在1.5w/s左右,多线程下到5.2w/s,效果基本稳定在5w/s上下。

整体 CYQ.Data Redis 表现是不错的,常规调用性能比 StackExchange.Redis 高一些(去掉它鸡贼的批量方式)。

目前 CYQ.Data 未提供批量方法调用,后续会考量,是否引入这种自动批量处理方式,或提供批量调用入口。

目前机制下,可以通过增加 Redis 服务数量来提升并发性能。

CYQ.Data 操作 Redis 性能测试:对比 StackExchange.Redis的更多相关文章

  1. 【11】Redis .net 实例 StackExchange.Redis框架

    1.创建测试项目并下载nuget包:StackExchange.Redis PM> Install-Package StackExchange.Redis 2.创建 RedisHelper类 p ...

  2. Redis系列(一)StackExchange.Redis的使用

    Redis系列(一)StackExchange.Redis的使用 一.DLL安装 用NuGet搜索StackExchange.Redis,然后下载就可以. ConnectionMultiplexer对 ...

  3. c# redis 操作类库推荐:StackExchange.Redis.Extensions

    StackExchange是一个优秀的c# redis客户端,但是存在操作略为繁琐的弊端,为了简化操作,使用 StackExchange.Redis.Extensions成为了一个非常值得推荐的选择. ...

  4. Redis集群~StackExchange.redis连接Twemproxy代理服务器

    回到目录 本文是Redis集群系列的一篇文章,主要介绍使用StackExchange.Redis进行Twemproxy(文中简称TW)代理服务的连接过程,事务上,对于TW来说,我们需要理解一下它的物理 ...

  5. NET 5 MemoryCache与Redis使用以及StackExchange.Redis和CSRedisCore

    简介以及区别 ASP.NET Core 缓存Caching,.NET Core 中为我们提供了Caching 的组件. 目前Caching 组件提供了三种存储方式. Memory Redis SqlS ...

  6. Redis 系列 (一) StackExchange.Redis的使用

    一.DLL安装 用NuGet搜索StackExchange.Redis,然后下载就可以. ConnectionMultiplexer对象是StackExchange.Redis最中枢的对象.这个类的实 ...

  7. Redis学习笔记~StackExchange.Redis实现分布式Session

    回到目录 对于多WEB的环境现在已经是必须的了,很难想像一台WEB服务器面对百万并发的响应,所以,我们需要多台WEB服务器集群合作,来缓解这种高并发,高吞吐的场景,而对于多WEB的场景又会有个问题出现 ...

  8. Redis集群~StackExchange.redis连接Sentinel服务器并订阅相关事件(原创)

    回到目录 对于redis-sentinel我在之前的文章中已经说过,它是一个仲裁者,当主master挂了后,它将在所有slave服务器中进行选举,选举的原则当然可以看它的官方文章,这与我们使用者没有什 ...

  9. Redis集群~StackExchange.Redis(10月6号版1.1.608.0)连接Twemproxy支持Auth指令了

    回到目录 对于StackExchange.Redis这个驱动来说,之前的版本在使用Proxy为Twemproxy代理时,它是不支持Password属性的,即不支持原始的Auth指令,而我也修改过源代码 ...

  10. 关于 Senparc.Weixin.Cache.Redis 引用的 StackExchange.Redis 版本不匹配的反馈测试

    推测原因是老系统中有地方引用了旧版本的 StackExchange.Redis,原因是 StackExchange.Redis 1.2.6 版本未提供针对 .net 4.6 以上的支持,导致库引用会失 ...

随机推荐

  1. 基于队列实现生产者消费者(Python)

    # 进城之间数据隔离 # 进程之间通信(IPC) Inter Process communication # 基于文件 :同一台机器上的多个进程之间通信 # Queue 队列 # 基于socket的文 ...

  2. Java21 + SpringBoot3整合springdoc-openapi,自动生成在线接口文档,支持SpringSecurity和JWT认证方式

    目录 前言 相关技术简介 OpenAPI Swagger Springfox springdoc swagger2与swagger3常用注解对比 实现步骤 引入maven依赖 修改配置文件 设置api ...

  3. mysql删除表中重复记录

    1.创建测试表,并插入数据 create table test( id int(11) primary key auto_increment comment '用户编号', username varc ...

  4. 《ASP.NET Core 微服务实战》-- 读书笔记(第11章)

    第 11 章 开发实时应用和服务 在本章,我们将讨论"实时"的准确含义,以及在大部分消费者看来应该属于这一范畴的应用类型 接着,我们将探讨 WebSocket,并分析为什么传统的 ...

  5. NC16619 [NOIP2008]传球游戏

    题目链接 题目 题目描述 上体育课的时候,小蛮的老师经常带着同学们一起做游戏.这次,老师带着同学们一起做传球游戏. 游戏规则是这样的:n个同学站成一个圆圈,其中的一个同学手里拿着一个球,当老师吹哨子时 ...

  6. Linux常用的20个命令(下)

    无论你是后端程序员还是前端程序员,都避免不了和Linux打交道.上篇介绍了Linux常用的20个命令其中的10个,本文继续介绍剩下的10个命令. 11.man 命令 manual的缩写,即使用手册的意 ...

  7. SSH通道

    线下到线上  通过http协议 线上到线下  不能走http,只能通过ssh通道,建立玩ssh通道后,线上线下就可以通道ssh通道进行通信 如:线上为ssm项目  线下为linux项目,二者之间lin ...

  8. js加css实现div展示更多隐藏内容

    说明 在设计博客首页文章分类等栏目时,有时候列表内容太多往往不是一次性展示出来.此时需要添加更多功能,当点击更多标签时再展示剩余隐藏的项目. 效果 代码 <!DOCTYPE html> & ...

  9. windows 上 cmake 添加 vcpkg 选项

    使用 cmake 编写相关的工程时,工程有时会使用 vcpkg 添加的第三方库,比如 zip 库 查看一些案例后,我发现有些回答不太准确,遂记录下 现在,我们需要在工程中使用 zip_open 函数执 ...

  10. dllimport 和 dllexport

    Dll 在需要暴露接口的头文件里添加 dllexport 声明,比如, #define DllExport __declspec( dllexport ) class DllExport C { in ...