前言:

前几天,点开自己的博客,看了一下 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. Socket.D v2.3.9 发布(增加 node.js server 实现)

    Socket.D 是基于"事件"和"语义消息""流"的网络应用层传输协议.有用户说,"Socket.D 之于 Socket,尤如 ...

  2. SpringBoot基于Spring Security的HTTP跳转HTTPS

    简单说说 之所以采用Spring Security来做这件事,一是Spring Security可以根据不同的URL来进行判断是否需要跳转(不推荐), 二是不需要新建一个TomcatServletWe ...

  3. Leetcode刷题第一天-贪心

    455-分饼干 链接:455. 分发饼干 - 力扣(LeetCode) 优先使用最小饼干满足最小胃口,一个娃只能分一个饼干T_T不能加 1 class Solution: 2 def findCont ...

  4. Delphi 异常处理 详解

    [1] Exception类的定义在SysUtils单元中. [2] Delphi也支持不从Exception继承的异常类,但是我觉得这么做并不十分的明智. 一.异常的源 在Delphi的应用程序中, ...

  5. NC201985 立方数

    题目链接 题目 题目描述 对于给定的正整数 N,求最大的正整数 A,使得存在正整数 B,满足 \(A^3B=N\) 输入包含 T 组数据,1≤T≤10,000:\(1≤N≤10^{18}\) 输入描述 ...

  6. CSS实现渐隐渐现效果

    CSS实现渐隐渐现效果 实现渐隐渐现效果是比较常见的一种交互方式,通常的做法是控制display属性值在none和其它值之间切换,虽说功能可以实现,但是效果略显生硬,所以会有这样的需求--希望元素消失 ...

  7. ElementUI导入Excel文件

    功能介绍 最近用ElementUI做管理系统需要把excel数据导入到系统内,我想这是一个很常见的功能点,把它分享出来,希望对大家有所帮助:) 实现效果 实现步骤 1.定义导入组件 <el-up ...

  8. 为什么华为今年疯狂招od?

    不知道的大家有没有发现 这两年市场不好公司用人需求紧缩 唯有华子疯狂招人 很多人都听过华为OD 但是具体是什么还是有很多人疑惑 总结以下三个部分: 1.为啥疯狂招od而不是之前的纯"外包&q ...

  9. win32- GetMessage的使用

    BOOL bRet; while( (bRet = GetMessage( &msg, hWnd, 0, 0 )) != 0) { if (bRet == -1) { // handle th ...

  10. 深入理解Go语言(08):sync.WaitGroup源码分析

    一.sync.WaitGroup简介 1.1 sync.WaitGroup 解决了什么问题 在编程的时候,有时遇到一个大的任务,为了提高计算速度,会用到并发程序,把一个大的任务拆分成几个小的独立的任务 ...