Redis核心技术-性能-实战(查找bigKey、hotkey)

排查bigkey

过大的 Value 会引发数据倾斜热点Key实例流量CPU 性能被占满等问题,这个时候就需要排查 Redis 的大key去优化业务了,下面提供一些排查方案总结。

多大的 key 算大呢?

  • 一个STRING类型的Key,它的值为5MB(数据过大)
  • 一个LIST类型的Key,它的列表数量为20000个(列表数量过多)
  • 一个ZSET类型的Key,它的成员数量为10000个(成员数量过多)
  • 一个HASH格式的Key,它的成员数量虽然只有1000个但这些成员的value总大小为100MB(成员体积过大)

如何查询key大小?
MEMORY USAGE 命令给出一个 key 和它的值在 RAM 中所占用的字节数。

> memory usage testk
51

1.使用命令 --bigkeys

–bigkeys 是 redis 自带的命令,对整个 Key 进行扫描,统计 string,list,set,zset,hash 这几个常见数据类型中每种类型里的最大的 key。

–bigkeys 是以 scan 延迟计算的方式扫描所有 key,因此执行过程中不会阻塞 redis,但实例存在大量的 keys 时,命令执行的时间会很长,这种情况建议在 slave 上扫描。

Linux:

redis-cli -h 127.0.0.1 -p 6379 -a "password" --bigkeys

Windows:

./redis-cli.exe -h 127.0.0.1 -p 6379 -a "password" --bigkeys

2.使用 Rdbtools 工具包

Rdbtools 是 python写的 一个第三方开源工具,用来解析 Redis 快照文件。除了解析 rdb 文件,还提供了统计单个 key 大小的工具。

2.1安装

git clone https://github.com/sripathikrishnan/redis-rdb-tools
cd redis-rdb-tools sudo && python setup.py install

2.2使用

从 dump.rdb 按照文件统计, 将所有 > 10kb 的 key 输出到一个 csv 文件

rdb dump.rdb -c memory --bytes 10240 -f live_redis.csv

3.阿里云DBA工具

Redis核心技术-性能-实战(查找bigKey、hotkey)_第1张图片

排查hotkey

热Key带来的常见问题:

  1. 热Key占用大量的Redis CPU时间使其性能变差并影响其它请求;
  2. Redis Cluster中各node流量不均衡造成Redis Cluster的分布式优势无法被Client利用,一个分片负载很高而其它分片十分空闲从而产生读/写热点问题;
  3. 在抢购、秒杀活动中,由于商品对应库存Key的请求量过大超出Redis处理能力造成超卖;
  4. 热Key的请求压力数量超出Redis的承受能力造成缓存击穿,此时大量强求将直接指向后端存储将其打挂并影响到其它业务;

1.–hotkeys 工具

执行redis自带的hotkey查询工具:

Administrator@DESKTOP-2TA9FLB MINGW64 /f/opt/Redis/Redis-x64-5.0.14.1
$ ./redis-cli.exe -h r-xxx.redis.rds.aliyuncs.com -p 6379 -a "123456" --hotkeys
Warning: Using a password with '-a' or '-u' option on the command line interface may not be safe.
Error: ERR An LFU maxmemory policy is not selected, access frequency not tracked. Please note that when switching between policies at runtime LRU and LFU data will take some time to adjust.

但是,需要把redis缓存淘汰策略 设置为volatile-lfu或者allkey-lfu才能使用 --hotkeys。

查询缓存淘汰策略配置:

> config get maxmemory-policy
maxmemory-policy
volatile-lru

2.阿里云DBA工具

Redis核心技术-性能-实战(查找bigKey、hotkey)_第2张图片

你可能感兴趣的:(Redis核心技术,redis,缓存,bigkey,hotkey)