如何处理大key问题
# 问题描述
当一个Key的Value过大或List、Hash等类型的数据中存储了大量的元素时,读取、删除这些数据的操作可能会耗费较长时间,阻塞单线程的Redis服务。此时您需要对内存结构进行优化,找出大Key并进行调整。
# 获取大Key
查找大Key的方法多种多样,以下介绍使用redis-cli工具查找大Key的方法。
# 前提条件
- 具备可以与Redis实例互通的云服务器。
- 云服务器中已经安装原生Redis。
# 操作步骤
执行以下命令:
redis-cli -h 服务IP -a 密码 --bigkeys
1
说明:
- -h指定Redis的内网连接地址。
- -a指定Redis的认证密码。
- --bigkeys查找大Key。
显示结果如下:
redis-cli -h 10.XX.XX.3 -a XXXX --bigkeys
# Scanning the entire keyspace to find biggest keys as well as
# average sizes per key type. You can use -i 0.1 to sleep 0.1 sec
# per 100 SCAN commands (not usually needed).
[00.00%] Biggest zset found so far 'testzset' with 129 members
[00.00%] Biggest hash found so far 'h2' with 513 fields
[00.00%] Biggest set found so far 'si1' with 5 members
[00.00%] Biggest hash found so far 'h4' with 514 fields
[00.00%] Biggest string found so far 'key' with 9 bytes
-------- summary -------
Sampled 9 keys in the keyspace!
Total key length in bytes is 27 (avg len 3.00)
Biggest string found 'key' has 9 bytes
Biggest set found 'si1' has 5 members
Biggest hash found 'h4' has 514 fields
Biggest zset found 'testzset' has 129 members
1 strings with 9 bytes (11.11% of keys, avg size 9.00)
0 lists with 0 items (00.00% of keys, avg size 0.00)
2 sets with 8 members (22.22% of keys, avg size 4.00)
4 hashs with 1541 fields (44.44% of keys, avg size 385.25)
2 zsets with 132 members (22.22% of keys, avg size 66.00)
0 streams with 0 entries (00.00% of keys, avg size 0.00)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
# 优化大Key
对于大Key,如果是一个Key的Value过大,您可以将对象拆分成多个 key-value,将操作压力平摊到多个 Redis 实例。如果是 Key 过多,您可以参考 hash 结构存储,将多个 Key 存储在一个 hash 结构中。