CYQ.Data 操作 Redis 性能测试:对比 StackExchange.Redis

前言:

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

相关推荐
Code apprenticeship1 小时前
怎么利用Redis实现延时队列?
数据库·redis·缓存
百度智能云技术站1 小时前
广告投放系统成本降低 70%+,基于 Redis 容量型数据库 PegaDB 的方案设计和业务实践
数据库·redis·oracle
装不满的克莱因瓶1 小时前
【Redis经典面试题六】Redis的持久化机制是怎样的?
java·数据库·redis·持久化·aof·rdb
黄名富5 小时前
Redis 附加功能(二)— 自动过期、流水线与事务及Lua脚本
java·数据库·redis·lua
G_whang6 小时前
centos7下docker 容器实现redis主从同步
redis·docker·容器
.生产的驴6 小时前
SpringBoot 对接第三方登录 手机号登录 手机号验证 微信小程序登录 结合Redis SaToken
java·spring boot·redis·后端·缓存·微信小程序·maven
我叫啥都行9 小时前
计算机基础复习12.22
java·jvm·redis·后端·mysql
阿乾之铭10 小时前
Redis四种模式在Spring Boot框架下的配置
redis
on the way 12312 小时前
Redisson锁简单使用
redis
科马13 小时前
【Redis】缓存
数据库·redis·spring·缓存