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 就不会剧烈抬升,但是扫描的时间会变长
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
浙公网安备 33010602011771号