redis之大key bigkeys
######################
发现大keys:
[work@a8-dba-cloud-db00.wh cdrom]$ ./redis_7001/bin/redis-cli -a jJAV0kTokNb8iZvwfqniCxmFZEsbOH5n -c --bigkeys -p 7001 -h 192.168.31.33 Warning: Using a password with '-a' or '-u' option on the command line interface may not be safe. # 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 string found so far '"mykey84336"' with 5 bytes [00.00%] Biggest list found so far '"mylist170898"' with 1 items [00.00%] Biggest hash found so far '"obj135479"' with 1 fields [00.00%] Biggest string found so far '"mykey345061"' with 6 bytes [02.00%] Biggest list found so far '"mylist"' with 410013 items [25.94%] Biggest hash found so far '"obj"' with 410014 fields -------- summary ------- Sampled 615176 keys in the keyspace! Total key length in bytes is 6395083 (avg len 10.40) Biggest list found '"mylist"' has 410013 items Biggest hash found '"obj"' has 410014 fields Biggest string found '"mykey345061"' has 6 bytes 205144 lists with 615156 items (33.35% of keys, avg size 3.00) 205110 hashs with 615123 fields (33.34% of keys, avg size 3.00) 204922 strings with 1173982 bytes (33.31% of keys, avg size 5.73) 0 streams with 0 entries (00.00% of keys, avg size 0.00) 0 sets with 0 members (00.00% of keys, avg size 0.00) 0 zsets with 0 members (00.00% of keys, avg size 0.00)
解决大keys:
- 当Redis版本大于4.0时,可使用UNLINK命令安全地删除大Key,该命令能够以非阻塞的方式,逐步地清理传入的Key;
- 当Redis版本小于4.0时,避免使用阻塞式命令KEYS,而是建议通过SCAN命令执行增量迭代扫描key,然后判断进行删除。
- 当vaule是string时,比较难拆分,则使用序列化、压缩算法将key的大小控制在合理范围内,但是序列化和反序列化都会带来更多时间上的消耗;
- 当value是string,压缩之后仍然是大key,则需要进行拆分,一个大key分为不同的部分,记录每个部分的key,使用multiget等操作实现事务读取;
- 当value是list/set等集合类型时,根据预估的数据规模来进行分片,不同的元素计算后分到不同的片。
######################
igoodful@qq.com

浙公网安备 33010602011771号