老师您好,想问一下不得不使用的bigkey问题
来源:4-29 Redis性能优化及bigkey搜索与删除
Madlife2
2021-02-24
课程里讲到了bigkey的发现和异步删除,但是关于一些不得不使用的bigkey我们应该怎么处理呢?
- 比如前边的积分排行榜,每个人的积分都被存储在一个统一的zset中,但是如果用户量大了,达到了百万级,这个排行榜bigkey的查询势必会很慢,这种场景我们应该如何处理呢?
- 对于这些不得不维护的bigkey,我们是否还需要设置过期时间呢?如果不设置过期时间,好像不符合redis的key优化设计原则。但是如果设置了过期时间,如果这个过期时间达到,redis将该过期key清理,我们就需要去数据库读取数据再放入到redis中,造成系统性能抖动,这种情况应该怎么处理
谢谢老师解答!
写回答
1回答
-
这其实就是bigkey的优化问题,得根据实际的业务需求来确定,第一个问题,理论上zset可以存放4294967295(所以一般能做到这级别的肯定厉害了),但真的如果很大的时候我们要考虑拆分,比如积分排行的前十名是不是可以存在另外一个list里面,或者排名超过多少,我们就不显示了之类的。第二个问题,还是要设置一个过期时间的,哪怕设置的时间非常长(当然我之前公司也碰到过不设置过期时间的,也没出问题,当然现在不出问题不代表以后不出问题),至于将数据库的数据存放到redis的问题,有很多种方式的,你可以采用阿里的canal去做,你在一天中选择一个访问比较少的时间段去做就好了
112021-02-27