前言:

前几天,点开自己的博客,看了一下 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 服务数量来提升并发性能。

posted on 2024-03-13 11:37  路过秋天  阅读(447)  评论(0编辑  收藏  举报
路过秋天