Redis zset排行榜究竟能存多少数据(测试分析)

redis的zset非常适合用来做排行榜,可排行榜能容纳多少人呢?理论上来说redis zset的跳表能存2^64次方条数据进去,可是实践中能存多少你也不清楚的,万一应用中翻车了呢?所以需要提前测试测试
我电脑配置如下,使用自己电脑windows10操作系统进行测试,结果与linux我觉得相差不会很大的,这数据是存储到运行内存的。

在这里插入图片描述
批量生成数据插入zset的lua脚本如下

local i = 10000000
while( i < 110099999)
do
    redis.call('zadd','testzset',i%13579,i)
    i = i +1
end
# 执行命令如下
redis-cli --eval ./test.lua

初始时电脑已使用内存为8.5GB,在插入数据到一亿时内存到了97%,插入脚本被阻塞住了,没有内存给它用了。。。只好shutdown nosave关闭掉redis服务器来释放内存
往zset插入一亿条8位ID+5位内score耗费掉了我14GB左右内存。快照rdb文件900M(里面九千万条已保存数据),重启redis恢复快照耗费755秒(恢复期间与脚本批量生成数据期间无法执行redis读写命令,因此不要对大家都在用的redis去做这样的操作)。
恢复九千万条数据后对该zset进行zrevrange、zcard操作还是很顺畅丝滑立即出结果的,性能挺不错。
但是不建议一次查询过多数据,会堵塞redis的IO,影响其他业务使用redis,应当采取分页、计算关键数据这些方式来查询数据,让一次redis操作返回的数据量比较小。
从目前测试的情况来看redis zset做排行榜还是不错的,存下一亿条数据也可以做到,但是这样一个榜单就会占十多GB内存,可贵了!要便宜的话还是用磁盘存的数据库吧,然后牺牲下排行榜的实时性,调度定时来更新前多少名,再固定存到磁盘,加上本地缓存来实现接口大量查询~

posted @ 2023-01-08 10:43  HumorChen99  阅读(53)  评论(0编辑  收藏  举报  来源