一般特征
- 单个Key存储大value
- hash、set、zset、list中存储过多数据
- 一个集群存储了上亿的key
具体描述
- 一个STRING类型的Key,它的值为5MB(数据过大)。
- 一个LIST类型的Key,它的列表数量为20000个(列表数量过多)。
- 一个ZSET类型的Key,它的成员数量为10000个(成员数量过多)。
- 一个HASH格式的Key,它的成员数量虽然只有1000个但这些成员的value总大小为100MB(成员体积过大)
命令行
redis --bigkeys
场景:string的长度有10M
整存整取
一般对string操作都是整存整取,可以尝试将对象拆分成多个key-value,使用multiGet获取值,这样分拆意义在于分拆操作的压力,将操作压力平摊到多个redis实例,降低对于单个redis的io压力。
部分存取
同样可以拆成几个key-value,也可以将这些存储在一个hash中,每个field代表具体属性,使用hget、hmget来获取部分value,使用hset、hmset来更新部分属性
场景:hash的成员数目达到了10W
可以采用分段hash,将一个hash拆分为多个hash。
存取的时候,先计算相应的hash key即可
场景:一个集群存储了上亿的key
利用hash将很多string聚合起来,可以大量减少key的数目。
redis中的key尽量加上过期时间
场景:zset存储了全局排行榜
实现排行榜时,往往需要存储全服数据,zset的成员数目会很大。
可以设置上榜的阈值,将大量无效的数据挡住。
根据业务需求,尽量将不影响排行结果的数据挡住,降低zset的成员数目