Redis内置命令
通过Redis内置命令对目标Key进行分析,可以使用风险较低的命令来查询目前Key的字节数、列表长度或成员数量
STRING类型:执行STRLEN命令,返回对应Key的value的字节数。
LIST类型:执行LLEN命令,返回对应Key的列表长度。
HASH类型:执行HLEN命令,返回对应Key的成员数量。
SET类型:执行SCARD命令,返回对应Key的成员数量。
ZSET类型:执行ZCARD命令,返回对应Key的成员数量。
STREAM类型:执行XLEN命令,返回对应Key的成员数量。
注意!!!
DEBUG OBJECT与MEMORY USAGE命令在执行时需占用较多资源,且时间复杂度为O(N),有阻塞Redis实例的风险,不建议使用。
大Key优化
业务侧 -- 根本
业务侧优先考虑避免大key设计,不要什么都往里放,仅仅缓存必要的数据字段
拆分 分片
例如将含有数万成员的一个HASH Key拆分为多个HASH Key,并保证每个Key的成员数量在合理范围。在Redis集群架构中,拆分大Key能对数据分片间的内存平衡起到显著作用
需要考虑下面几个问题:
定量拆分还是动态拆分?定量拆分需要考虑value增长的问题;动态分片就是先按原key读第一个分片,第一个分片的value记录分片的总数,然后再按照shard_num取。
存在部分写问题,比如写入10个分片的数据,只有5个分片写入成功,就会造成数据不一致问题。解决方案有下面几个
引入版本机制
value最前面带上版本号
一个分片不对就算错误,重新加载,容易陷入死循环
开发、维护、组装的成本