BigKeg

本文介绍了在大规模Redis使用中进行性能优化的方法,包括生成大量Redis键值对进行压测,禁用危险操作如FLUSHALL和FLUSHDB,以及使用SCAN代替keys*。还重点讨论了BIGKEY的概念、危害及处理方法,懒删除(lazyfree)特性在内存管理和性能调优中的应用。
摘要由CSDN通过智能技术生成

一 、压测 

# 生成100W条redis批量设置kv的语句(key=kn,value=vn)写入到/tmp目录下的redisTest.txt文件中

for((i=1;i<=100*10000;i++)); do echo "set k$i v$i" >> /tmp/redisTest.txt ;done;

cat /tmp/redisTest.txt | /opt/redis-7.0.0/src/redis-cli -h 127.0.0.1 -p 6379 -a 111111 --pipe

二、禁用危险操作 

大数据下 keys *   FLUSH ALL   FLUSHDB 都是危险操作,容易引起线程阻塞 在配置文件需要禁用

三、替代操作 SCAN

 

 

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

 

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

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

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

 

SCAN的遍历顺序

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

 

 四、BIGKEY相关

BIGKEY的定义

参考阿里云规范手册

有哪些危害

内存不均,集群迁移困难

超市删除,大KEY删除作梗

网络流量阻塞

如何产生

社交内 例如明星粉丝数量

汇总统计 某个报表积年累月的汇集

如何发现

--bigkeys

好处,见最下面总结

给出每种数据结构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

 

 MEMORY USAGE

 

 如何删除

STRING 

一般用del,如果过于庞大unlink

hash

使用hscan每次少量获取键值对,在使用hdel删除值

 

 list

使用ltrim渐进式逐步删除,知道全部删除完成

 set

使用sscan每次获取部分元素,在使用srem 命令删除每个元素

 

 

zset

使用zscan每次获取部分元素,再使用ZREMRANGEBYRANK 删除每个元素

 

 

 五、调优

lazy free 特性是 Redis 4.0 新增的一个非常使用的功能,它可以理解为惰性删除或延迟删除。意思是在删除的时候提供异步延时释放键值的功能,把键值释放操作放在 BIO(Background I/O) 单独的子线程处理中,以减少删除删除对 Redis 主线程的阻塞,可以有效地避免删除 big key 时带来的性能和可用性问题。

 

 

  • lazyfree-lazy-eviction:表示当 Redis 运行内存超过 maxmeory 时,是否开启 lazy free 机制删除;
  • lazyfree-lazy-expire:表示设置了过期时间的键值,当过期之后是否开启 lazy free 机制删除;
  • lazyfree-lazy-server-del:有些指令在处理已存在的键时,会带有一个隐式的 del 键的操作,比如 rename 命令,当目标键已存在,Redis 会先删除目标键,如果这些目标键是一个 big key,就会造成阻塞删除的问题,此配置表示在这种场景中是否开启 lazy free 机制删除;
  • slave-lazy-flush:针对 slave(从节点) 进行全量数据同步,slave 在加载 master 的 RDB 文件前,会运行 flushall 来清理自己的数据,它表示此时是否开启 lazy free 机制删除。

六、总结

定时检测bigkey

禁用危险操作

及时调优

  • 24
    点赞
  • 17
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值