大Key、热Key

大Key

Redis使用过程中经常会有各种大key的情况, 比如单个简单的key存储的value很大。
由于redis是单线程运行的,如果一次操作的value很大会对整个redis的响应时间造成负面影响,导致IO网络拥塞。

 

解决方案

将整存整取的大对象,分拆为多个小对象。可以尝试将对象分拆成几个key-value, 使用multiGet获取值,这样分拆的意义在于分拆单次操作的压力,将操作压力平摊到多个redis实例中,降低对单个redis的IO影响;

 

大key的发现与删除方法

1、redis-rdb-tools工具。redis实例上执行bgsave,然后对dump出来的rdb文件进行分析,找到其中的大KEY。

2、redis-cli --bigkeys命令。可以找到某个实例5种数据类型(String、hash、list、set、zset)的最大key。

3、自定义的扫描脚本,以Python脚本居多,方法与redis-cli --bigkeys类似。

4、debug object key命令。可以查看某个key序列化后的长度,每次只能查找单个key的信息。官方不推荐。

 

热点Key 

产生问题的原因

请求到的分片过于集中,超过单台Server的性能极限。

在服务端读数据进行访问时,往往会对数据进行分片切分。此过程中会在某一主机Server上对相应的Key进行访问,当访问超过Server极限时,就会导致热点 Key 问题的产生。

热点Key的危害

  • 流量集中,达到物理网卡上限。
  • 请求过多,缓存分片服务被打垮。
  • DB 击穿,引起业务雪崩。

解决方式

  • 服务端缓存:即将热点数据缓存至服务端的内存中。
  • 备份热点Key:即将热点Key+随机数,随机分配至Redis其他节点中。这样访问热点key的时候就不会全部命中到一台机器上了。
posted @ 2021-12-17 11:17  kingNull  阅读(282)  评论(0编辑  收藏  举报