redis8解决特定问题的特定配置


redis实例的cpu开销不大吞吐量没有显著提升:

redis默认不开启多线程

1.设置io-thread-do-reads配置项为yes,表示启动多线程。(版本8去除这项)

2。设置io-threads线程个数。关于线程数的设置,官方的建议是如果为 4 核的 CPU,建议线程数设置为 2 或 3,如果为 8 核 CPU 建议线程数设置为 6,线程数一定要小于机器核数,线程数并不是越大越好。

 

bigkey 

向redis中插入100万条测试数据
[root@rocky10-8 ~]# for((i=1;i<=100*10000;i++)); do echo "set k$i v$i" >> /tmp/redisTest.txt ;done; [root@rocky10-8 ~]# cat /tmp/redisTest.txt | redis-cli -a 111111 --pipe

 redis禁用一些危险命令(配置redis.conf)

rename-command keys ""
rename-command flushdb ""
rename-command flushall ""

127.0.0.1:6379> keys *
(error) ERR unknown command 'keys', with args beginning with: '*'
127.0.0.1:6379> flushdb
(error) ERR unknown command 'flushdb'
127.0.0.1:6379> flushall
(error) ERR unknown command 'flushall'
127.0.0.1:6379>

禁用命令后的遍历方法

127.0.0.1:6379> SCAN 0 match * count 3

scan 游标 mathch 匹配模式 count 指定集中返回元素的数量(默认为10)
1) "589824"
2) 1) "k271188"
    2) "k204046"
    3) "k881502"

SCAN 命令是一个基于游标的迭代器,每次被调用之后, 都会向用户返回一个新的游标, 用户在下次迭代时需要使用这个新游标作为 SCAN 命令的游标参数, 以此来延续之前的迭代过程。

SCAN 返回一个包含两个元素的数组, 

第一个元素是用于进行下一次迭代的新游标, 

第二个元素则是一个数组, 这个数组中包含了所有被迭代的元素。如果新游标返回零表示迭代已结束。

SCAN的遍历顺序

非常特别,它不是从第一维数组的第零位一直遍历到末尾,而是采用了高位进位加法来遍历。之所以使用这样特殊的方式进行遍历,是考虑到字典的扩容和缩容时避免槽位的遍历重复和遗漏。

 

多大算大key(阿里云规范,string10kb,list、hash、set、zset元素数量5000以内)
查找bigkey

好处,见最下面总结

给出每种数据结构Top 1 bigkey,同时给出每种数据类型的键值个数+平均大小

不足

想查询大于10kb的所有key,--bigkeys参数就无能为力了,需要用到memory usage来计算每个键值的字节数

redis-cli -h 127.0.0.1 -p 6379 -a 111111 --bigkeys

每隔 100 条 scan 指令就会休眠 0.1s,ops 就不会剧烈抬升,但是扫描的时间会变长

redis-cli -h 127.0.0.1 -p 7001 –-bigkeys -i 0.1

 

samples 表示嵌套的数据类型,count表示抽样个数,默认为5,抽样所有元素时,count 用0

127.0.0.1:6379> MEMORY USAGE k3 [SAMPLES count]  

阻塞与非阻塞删除 no 改为yes

lazyfree-lazy-server-del no
replica-lazy-flush no

lazyfree-lazy-user-del no

posted on 2026-07-05 14:17  wtsgtc  阅读(5)  评论(0)    收藏  举报

导航