Redis不同版本性能研究
Redis不同版本性能研究
背景
前期同事遇到了一个大key的慢查询.
前提条件是: 一个 60万key的环境里面.
有一个 260万元素的set类型的key
产品经常会进行 smember key 的操作
出现了长达1.5秒的 slowlog.
同期还出现了内存飙涨与实际内存使用不符的情况.
所以想着研究一下内存.
发现新问题
当时与同事一起看时 记得 slowlog 是 1.5秒左右
因为我手头上刚好有一个 redis6.2.6 的飞腾ARM版本的环境,就直接拿来用了.
当时只是定位到了问题,所以每天关注.
早上起来,我突发奇想,是不是smember 导致内存上升, 然后就在ARM的环境里面执行了相关的命令
发现slowlog:
slowlog get
1) 1) (integer) 18
2) (integer) 1703203780
3) (integer) 854102
4) 1) "SMEMBERS"
2) "ecp:counter:*
发现只有0.85秒左右的延迟 我感觉不太对, 理论上ARM会更慢才对? 为何会这样?
同期发现内存是没有啥变化的. 所以没有解决旧问题, 但是发现了新问题
Redis的版本信息为:
redis_version:6.2.8
redis_git_sha1:00000000
redis_git_dirty:0
redis_build_id:1274cf00783b476
redis_mode:standalone
os:Linux 4.19.90-24.4.v2101.ky10.aarch64 aarch64
arch_bits:64
思考
Redis是单线程的
理论上他的延时只跟CPU的工作能力相关
理论上不应该出现如此大的差异. ARM 的延时只有 x86的一半
这个简直是不可理解的.
突然先到 客户现场使用的是redis 4.0.11 的版本.
然后进一步想到是不是版本性能差异?
想干就干一把
下载不同版本的redis
http://download.redis.io/releases/
redis-4.0.11.tar.gz 27-Jun-2020 15:51 1739656
redis-5.0.0.tar.gz 27-Jun-2020 15:51 1947721
# 发现发布时间不准. 尴尬
Redis 1.0 是 Redis 数据库的第一个正式版本,于2009年3月发布。
Redis 2.0 于2010年4月发布。Redis 2.0 引入了一些重要的新特性,如虚拟内存机制、实现 Redis 的 Lua 脚本语言、支持哈希类型的直接操作以及提供慢查询日志等功能
Redis 2.6 于2012年8月发布。Redis 2.6 引入了一些重要的新特性,如虚拟内存、持久化和内存优化等。
Redis 2.8 于2014年4月发布。Redis 2.8 引入了一些重要的新特性,如对 Lua 脚本、集群和二进制流支持的提升
Redis 3.0 于2015年4月发布。Redis 3.0 引入了一些重要的新特性,如更加高效和可靠的集群方案、更加安全和可靠的持久化机制,以及增强了对 Lua 脚本、哈希表和流数据的支持。
Redis 4.0 于2017年9月发布。Redis 4.0 引入了一些重要的新特性,如更加强大和高效的集群功能、更加安全和可靠的持久化机制、新的数据类型、事务和流水线批处理等功能。
Redis 5.0 于2018年10月发布。Redis 5.0 引入了一些重要的新特性,如更加强大和高效的模块化架构,更加安全和可靠的持久化机制、新的数据类型、多种集群模式、新增命令等等。
Redis 6.0 是 Redis 数据库的一个重要版本,于2020年4月发布, 支持了IO多线程
Redis 7.0 在2022年4月27日正式发布 它不仅包含了50多个新命令,还有大量核心新特性与改进
Redis 7.2 于2023年8月15日发布.
关于redis版本号的说明
Redis 使用标准版本标记进行版本控制:major.minor.patchlevel。
偶数的版本号表示稳定的版本, 例如 1.2,2.0,2.2,2.4,2.6,2.8。
奇数的版本号用来表示非标准版本,例如2.9.x是非稳定版本,它的稳定版本是3.0。
测试规划
计划编译 4.0.11 和 7.2.3 等版本进行验证.
导入dump文件, 执行smember 命令查看slowlog的结果信息
编译时间:
4.0.11
real 1m43.809s
user 1m39.276s
sys 0m6.801s
5.0.14
real 2m54.587s
user 2m49.529s
sys 0m9.701s
7.2.3
real 5m4.991s
user 4m55.361s
sys 0m16.131s
注意都是 飞腾S2500 的服务器
可以看到编译时间 4.0.11 100秒. 7.2.3 编译时间 304秒.
经过六年时间的发展, redis的代码量可能有了2-3倍的变化.
所以东西变重是很正常的.
时间差异
Redis 4.0.11
slowlog get
1) 1) (integer) 0
2) (integer) 1703205853
3) (integer) 1061550
4) 1) "smembers"
2) "ecp:counter:
列表完整展示时间: (124.69s)
used_memory:2176292832
used_memory_human:2.03G
used_memory_rss:2368798720
used_memory_rss_human:2.21G
dbsize
(integer) 648463
Redis 5.0.14
1) 1) (integer) 3
2) (integer) 1703208791
3) (integer) 1019090
4) 1) "SMEMBERS"
2) "ecp:counter:
used_memory:2175424280
used_memory_human:2.03G
used_memory_rss:2210332672
used_memory_rss_human:2.06G
dbsize
(integer) 648463
Redis 6.2.8
1) 1) (integer) 18
2) (integer) 1703203780
3) (integer) 854102
4) 1) "SMEMBERS"
2) "ecp:counter
列表完整展示时间: (112.00s)
内存使用情况:
used_memory:2175438112
used_memory_human:2.03G
used_memory_rss:2255749120
used_memory_rss_human:2.10G
dbsize
(integer) 648463
Redis 7.2.3
这个版本的dump文件数据格式发生了变化, 无法加载.
SMEMBERS ecp:counter
(empty array)
这一点非常坑.
used_memory:1584538448
used_memory_human:1.48G
used_memory_rss:1626537984
used_memory_rss_human:1.51G
used_memory_peak:1584791080
used_memory_peak_human:1.48G
dbsize
(integer) 648463
一个简单结论
1. Redis 6.2.8 导出的文件 4.0.11 无法加载,提示版本不对, 无法加载文件类型为 9的 内存文件.
2. Redis 6.2.8 和 redis 4.0.11 的dump文件时可以向前兼容的, 能够加载里面的大部分数据.
3. Redis 7.0.11 可以加载 4.0.11和 6.2.8 导出的dump文件, disize也是准确的, 但是缺少了部分数据
Set类型的key出现了数据丢失, 是一个不兼容升级.
4. 简单看到 Redis6.2.8 比 Redis 4.0.11 的最大时间有了一定的优化.
比较三次的slowlog的时间为:
redis 4.0.11 的三次平均时间: 1,059,415
redis 5.0.14 的三次平均时间: 1,023,054
redis 6.2.8 的三次平均时间: 842,629
发现redis的确随着版本的提升, 性能出现了一定程度的提高.
客户现场使用的是x86的redis 但是因为采用的是 K8S pod运行, 并且采用了 nfs存储.
我怀疑K8S容器化的损耗也比较大, 对性能的影响也比较多.
客户理论上应该是2020年左右的服务器, 理论上比 飞腾S2500至少要领先 5年.
所以现在推断 一方面是版本太低, 一方面是容器化损耗导致性能下降.
如果对性能要求比较高, 一方面使用高频CPU, 一方面使用更新的性能更好的版本, 一方面降低部署复杂度,让软件更接近于硬件
性能会更加好一些.
Redis不同版本性能研究的更多相关文章
- redis状态与性能监控
Redis介绍 Redis是一种高级key-value数据库.它跟memcached类似,不过数据可以持久化,而且支持的数据类型很丰富.有字符串,链表.哈希.集合和有序集合5种.支持在服务器端计算集合 ...
- Redis 优化查询性能
一次使用 Redis 优化查询性能的实践 应用背景 有一个应用需要上传一组ID到服务器来查询这些ID所对应的数据,数据库中存储的数据量是7千万,每次上传的ID数量一般都是几百至上千数量级别. 以前 ...
- Redis各种数据结构性能数据对比和性能优化实践
很对不起大家,又是一篇乱序的文章,但是满满的干货,来源于实践,相信大家会有所收获.里面穿插一些感悟和生活故事,可以忽略不看.不过听大家普遍的反馈说这是其中最喜欢看的部分,好吧,就当学习之后轻松一下. ...
- 一次使用 Redis 优化查询性能的实践
因为我的个人网站 restran.net 已经启用,博客园的内容已经不再更新.请访问我的个人网站获取这篇文章的最新内容,一次使用 Redis 优化查询性能的实践 应用背景 有一个应用需要上传一组ID到 ...
- Ehcache/Redis/Tair缓存性能对比[转载]
FW : http://xulingbo.net/?p=434 版权归许令波所有.此处只是一个转载. 后面介绍的不同方式都有测试数据,这些测试数据都是在同一的测试环境下得出的测试结果: 测试机器的配置 ...
- Redis基础与性能调优
Redis是一个开源的,基于内存的结构化数据存储媒介,可以作为数据库.缓存服务或消息服务使用. Redis支持多种数据结构,包括字符串.哈希表.链表.集合.有序集合.位图.Hyperloglogs等. ...
- Redis 历史版本下载URL
Redis 历史版本下载URL: http://download.redis.io/releases/ Redis和RedisClient 官网下载方式: https://blog.51cto.com ...
- 使用Redis管道提升性能
首发于 樊浩柏科学院 Redis 的 管道 (pipelining)是用来打包多条无关命令批量执行,以减少多个命令分别执行带来的网络交互时间.在一些批量操作数据的场景,使用管道可以显著提升 Redis ...
- Redis 常见的性能问题都有哪些?如何解决?
Redis 常见的性能问题都有哪些?如何解决? Master写内存快照,save命令调度rdbSave函数,会阻塞主线程的工作,当快照比较大时对性能影响是非常大的,会间断性暂停服务,所以Master最 ...
- 线上Redis高并发性能调优实践
项目背景 最近,做一个按优先级和时间先后排队的需求.用 Redis 的 sorted set 做排队队列. 主要使用的 Redis 命令有, zadd, zcount, zscore, zrange ...
随机推荐
- Python——CSS(层叠样式表,Cascading Style Sheets)、选择器(Selectors)
CSS(层叠样式表,Cascading Style Sheets)是一种用于描述文档样式和布局的样式表语言.它可以与HTML结合使用,用于控制网页的外观和格式.以下是CSS的主要特点和一些基本概念: ...
- 文心一言 VS 讯飞星火 VS chatgpt (45)-- 算法导论6.1 3题
三.证明:在最大堆的任一子树中,该子树所包含的最大元素在该子树的根结点上. 文心一言: 在最大堆中,根结点是整个堆中最大元素的孩子,因此它包含的最大元素是在该子树的根结点上. 我们可以通过递归的方式证 ...
- 如何使用mock应对测试所需随机数据
摘要:在做接口测试的时候,有的接口需要进行大量的数据进行测试,还不能是重复的数据,这个时候就需要随机生产数据进行测试了.这里教导大家使用mock.js生成各种随机数据. 一.什么是mock.js mo ...
- 教你如何优雅的改写“if-else”
摘要:这些场景,你是怎么写的代码? if-else,这是个再正常不过的coding习惯,当我们代码量小的时候用来做条件判断是再简单不过的了.但对于优秀程序员来说,这却不是好代码. 不信你往下看- 1. ...
- 华为云MVP周峥:气象预报是个技术活,大数据、超算、AI,缺一不可
摘要:在这样一个关乎民生的行业里,人工智能.大数据.超算这些技术,可发挥的潜力也是无限的,华为云MVP周峥就是其中的技术践行者,他正带领着团队为国内气象行业带来一股温柔而不失力量的春风. 本文分享自华 ...
- 企业诊断屋:在线小说企业如何用A/B测试赋能业务
更多技术交流.求职机会,欢迎关注字节跳动数据平台微信公众号,回复[1]进入官方交流群 近两年来,在线小说领域业务发展"降速",相较于几年前的快速扩张,2022年后国内在线小说企 ...
- socket.d.js v2.3.4 支持"微信"、"uniapp"
Socket.D 是基于"事件"和"语义消息""流"的网络应用层协议.有用户说,"Socket.D 之于 Socket,尤如 Vu ...
- PPT 合并形状
形状格式 -> 插入形状 -> 合并形状 选中的元素,就是要保留的元素. 可以到 https://www.iconfont.cn/ 下载SVG格式插入 PPT中进行使用 合并开状的应用 文 ...
- 又拍云邵海杨 - 25年Linux老兵,聊聊运维的“术”与“道”
您好邵总,请您先做个自我介绍吧,聊聊您的履历和现状,让大家更好的认识您,了解您的背景也有助于读者理解后面的采访内容 我是来自又拍云的邵海杨,从1998年开始使用Linux至今快25年了,资深(老鸟)L ...
- KVM--基本管理
#!/bin/bash iso=/iso/CentOS-7-x86_64-Minimal-1708.iso #本机镜像文件位置 centos=centos7.0 #操作系统版本 disk_path=/ ...