Redis 性能问题的记录

最近线上使用redis, 查询的情况不甚理想, 这个查询操作是个 lua 脚本, 包含如下操作

开发机 redis, 没有其他干扰, 插入的 zset 有 5000 member 左右, 使用的 redis 客户端是 spring-data, 底层 jedis 实现, 另外自己封装了一层

1. zrange key 0 0 withscores

2. expire key

3. zadd key score member

A. 结果测试10w次发现平均每次拿到数据的时间需要 2800 us (2.8 ms). 也就是说 qps 只能达到 350 左右

B. 于是在本地在此进行测试, 结果是每次调用花费 300 us (0.3 ms), 差了 10 倍左右

而在本地和开发机上直接用 redis benchmark 测试 zadd , 测试命令如下

A. 本机测试

redis-benchmark -q -r 100000 -n 100000 zadd sortedset 10 __rand_int__
zadd sortedset 10 __rand_int__: 45475.22 requests per second

127.0.0.1:6379> zcard sortedset
(integer) 63381

约合 22 us

B. dev 机器测试

redis-benchmark -h l-qproxy.tc.dev.cn6.qunar.com -p 6379 -q -r 100000 -n 100000 zadd sortedset 10 __rand_int__
zadd sortedset 10 __rand_int__: 25227.04 requests per second

remote.dev.com:6379> zcard sortedset
(integer) 63118

约合 40 us

至此又发现两者差距并没有想象中那么大, 现在怀疑是不是 lua 脚本的问题, 把 第一次测试中的lua脚本给替换成简单的 redis zrange key 0 0 命令, 再测试

A. 本地机器 137 us (0.1 ms)

B. dev 机器 2100 ns (2.1 ms)

现在看来, 可能是客户端写的烂的原因了, 在远程连接的时候连接做的不好, 导致效率低下

详细的测试数据

单位 us

Local Test 10W Zrange

No test
1.
elapsed : 7296558 count : 99999 avg : 72
Mon elapsed : 7127632 count : 100000 avg : 71

2.
elapsed : 8026594 count : 99999 avg : 80
Mon elapsed : 7843030 count : 100000 avg : 78

3.
elapsed : 8149801 count : 99995 avg : 81
Mon elapsed : 8032342 count : 100000 avg : 80

4.
elapsed : 7961328 count : 99997 avg : 79
Mon elapsed : 7820042 count : 100000 avg : 78

Test on borrow
1.
elapsed : 10842955 count : 99999 avg : 108
Mon elapsed : 10710879 count : 100000 avg : 107

2.
elapsed : 11232565 count : 99998 avg : 112
Mon elapsed : 11130959 count : 100000 avg : 111

3.
elapsed : 11353824 count : 99998 avg : 113
Mon elapsed : 11224904 count : 100000 avg : 112

4.
elapsed : 11005635 count : 99999 avg : 110
Mon elapsed : 10868879 count : 100000 avg : 108

Local Test 10W Lua

No test

1.
elapsed : 25749403 count : 99998 avg : 257
Mon elapsed : 25630396 count : 100000 avg : 256

2.
elapsed : 25682824 count : 99997 avg : 256
Mon elapsed : 25592035 count : 100000 avg : 255

3.
elapsed : 26502975 count : 99997 avg : 265
Mon elapsed : 26373153 count : 100000 avg : 263

4.
elapsed : 50227904 count : 99997 avg : 251
Mon elapsed : 50019605 count : 100000 avg : 250

Test on borrow

1.
elapsed : 30026344 count : 99998 avg : 300
Mon elapsed : 29874080 count : 100000 avg : 298

2.
elapsed : 56238052 count : 99998 avg : 281
Mon elapsed : 56005620 count : 100000 avg : 280

3.
elapsed : 84591577 count : 99998 avg : 281
Mon elapsed : 84299240 count : 100000 avg : 280

4.
elapsed : 112992770 count : 99993 avg : 282
Mon elapsed : 112601651 count : 100000 avg : 281

Dev Redis 10W Zrange

No borrow test

1.
elapsed : 118723620 count : 99993 avg : 1187
Mon elapsed : 118801299 count : 100000 avg : 1188

2.
elapsed : 248431698 count : 99993 avg : 1242
Mon elapsed : 248271355 count : 100000 avg : 1241

3.
elapsed : 360073711 count : 99993 avg : 1200
Mon elapsed : 359465633 count : 100000 avg : 1198

4.
elapsed : 116067058 count : 99996 avg : 1160
Mon elapsed : 115373200 count : 100000 avg : 1153

Test on borrow

1.
elapsed : 217290959 count : 94648 avg : 2295
Mon elapsed : 291451989 count : 100000 avg : 2914

2.
elapsed : 214828993 count : 99996 avg : 2148
Mon elapsed : 506368136 count : 200000 avg : 2531

3.
elapsed : 216495505 count : 100000 avg : 2164
Mon elapsed : 722433027 count : 300000 avg : 2408

4.
elapsed : 216426804 count : 99996 avg : 2164
Mon elapsed : 938483110 count : 400000 avg : 2346

Dev Redis 10W Lua

No borrow test

1.
elapsed : 139567804 count : 99928 avg : 1396
Mon elapsed : 140374850 count : 100000 avg : 1403

2.
elapsed : 137681314 count : 99996 avg : 1376
Mon elapsed : 278360257 count : 200000 avg : 1391

3.
elapsed : 138600259 count : 99995 avg : 1386
Mon elapsed : 416537097 count : 300000 avg : 1388

4.
elapsed : 152433076 count : 99997 avg : 1524
Mon elapsed : 568534621 count : 400000 avg : 1421

test on borrow

1.
elapsed : 275491060 count : 86077 avg : 3200
Mon elapsed : 458422068 count : 100000 avg : 4584

2.
elapsed : 245908497 count : 99989 avg : 2459
Mon elapsed : 704242016 count : 200000 avg : 3521

3.
elapsed : 253036141 count : 99161 avg : 2551
Mon elapsed : 967942699 count : 300000 avg : 3226

4.
elapsed : 251844305 count : 99965 avg : 2519
Mon elapsed : 1219753868 count : 400000 avg : 3049

Redis 性能问题的记录,布布扣,bubuko.com

时间: 2024-10-26 14:34:17

Redis 性能问题的记录的相关文章

关于redis性能问题分析和优化

一.如何查看Redis性能 info命令输出的数据可分为10个分类,分别是: server,clients,memory,persistence,stats,replication,cpu,commandstats,cluster,keyspace 为了快速定位并解决性能问题,这里选择5个关键性的数据指标,它包含了大多数人在使用Redis上会经常碰到的性能问题 二.内存 上图中used_memory 字段数据表示的是:由Redis分配器分配的内存总量,以字节(byte)为单位. 其中used_m

redis性能调优笔记(can not get Resource from jedis pool和jedis connect time out)

对这段时间redis性能调优做一个记录. 1.单进程单线程 redis是单进程单线程实现的,如果你没有特殊的配置,redis内部默认是FIFO排队,即你对redis的访问都是要在redis进行排队,先入先出的串行执行. 之所以能够保持高性能是因为以下3点: 1)内存操作 2)数据结构简单 3)大多数是hash操作 redis基本的命令耗时都是us级别的,所以及时是单进程单线程,也能保证很高的QPS. 2.can not get Resource from jedis pool和jedis con

Redis性能问题排查解决手册(七)

阅读目录: 性能相关的数据指标 内存使用率used_memory 命令处理总数total_commands_processed 延迟时间 内存碎片率 回收key 总结 性能相关的数据指标 通过Redis-cli命令行界面访问到Redis服务器,然后使用info命令获取所有与Redis服务相关的信息.通过这些信息来分析文章后面提到的一些性能指标. info命令输出的数据可分为10个类别,分别是: server clients memory persistence stats replication

redis性能问题排查

Redis性能问题排查解决手册(七) 2015-08-19 08:35 by 蘑菇先生, 6073 阅读, 9 评论, 收藏,  编辑  阅读目录: 性能相关的数据指标 内存使用率used_memory 命令处理总数total_commands_processed 延迟时间 内存碎片率 回收key 总结 性能相关的数据指标 通过Redis-cli命令行界面访问到Redis服务器,然后使用info命令获取所有与Redis服务相关的信息.通过这些信息来分析文章后面提到的一些性能指标. info命令输

Redis性能调优

Redis性能调优 尽管Redis是一个非常快速的内存数据存储媒介,也并不代表Redis不会产生性能问题.前文中提到过,Redis采用单线程模型,所有的命令都是由一个线程串行执行的,所以当某个命令执行耗时较长时,会拖慢其后的所有命令,这使得Redis对每个任务的执行效率更加敏感. 针对Redis的性能优化,主要从下面几个层面入手: 最初的也是最重要的,确保没有让Redis执行耗时长的命令 使用pipelining将连续执行的命令组合执行 操作系统的Transparent huge pages功能

Redis(二十一):Redis性能问题排查解决手册(转)

性能相关的数据指标 通过Redis-cli命令行界面访问到Redis服务器,然后使用info命令获取所有与Redis服务相关的信息.通过这些信息来分析文章后面提到的一些性能指标. info命令输出的数据可分为10个类别,分别是: server clients memory persistence stats replication cpu commandstats cluster keyspace 这篇主要介绍比较重要的2部分性能指标memory和stats. 需要注意的是info命令返回的信息

ASP.NET页面优化性能提升方法记录

今天与大家分享:一种优化页面执行速度的方法.采用这个方法,可以使用页面的执行速度获得[8倍]的提升效果. 为了让您对优化的效果有个直观的了解,我准备了下面的测试结果截图: 测试环境:1. Windows Server 2003 SP22. Viaual Studio 2008,使用自带的WebDev.WebServer.EXE运行网站程序.3. (ThinkPad SL510):Core2 T6670 2.2GHz, 4G内存 二个红框中的数字反映了优化前后的执行时间.数字表明:优化前后,执行时

memcached与redis性能测试总结

– 相同的数据模型,Memcached能保存的热数据要比Redis高些,如Memcached在13G的限定内存下大概能保存1亿条数据,而Redis大概保存了8千万条 – 相同服务器环境,Memcached写性能要比Redis高些,前者约10万条每秒,后者约7万条秒 – 达到内存上限时,Memcached插入性能除了在临界点有些抖动,大概降到7万条每秒,之后性能跟临界点之前一样,而Redis性能急剧下降,一度降到396条每秒,之后其性能受子进程dump数据及每秒产栺大量页面错误影响而持续下降 –

Redis性能调优:保存SNAPSHOT对性能的影响

前一段时间,开发环境反馈,Redis服务器访问非常慢,每个请求要数秒时间,重启之后2~3天又会这样. 我查看了一下Linux的性能,没有什么问题.通过 # redis-cli --latency 发现访问Redis确实很慢,执行info要几秒时间.里面有个参数已连接的客户端几万个,通过 Redis>client list 查看到很多client的age都很大,一直没有释放.于是怀疑是不是和这个有关,因为版本是2.8.6,无法通过client一次性kill掉所有的连接,只能写一个程序,一个一个地k