Redis——BigKey

1. MoreKey

        当redis key的数量过多时,使用keys*会耗费大量时间和性能,因此在生产上需要禁用一些危险命令。

如何禁用命令

在 redis.conf 文件 SECURITY 板块中设置 rename-command

例如禁用keys,flushdb,flushall

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

禁用keys*如何迭代查询key

使用scan命令,此外SSCAN用于set类型,HSCAN用于Hash类型,ZSCAN用于ZSet类型

SCAN cursor [MATCH pattern][count count]
// pattern 匹配模式
// count 迭代数量,默认10

遍历key时将cursor设为0,执行scan会返回一个游标值,下一次迭代从该游标值开始,当返回游标值为0时完成一次遍历

 查找以tk开头的key

 


2. BigKey

String类型大于10KB,list、hash、set和zset个数超过5000就可以称为BigKey

危害

  • 内存不均,集群迁移困难
  • 超时删除
  • 网络流量阻塞

如何发现

方法一:--bigkeys 

redis-cli --bigkeys

方法二:MEMORY USAGE 

该命令给出一个key和它的值在RAM中所占用的字节数

 

如何删除

非字符串的bigkey不要使用del删除,使用hscan、sscan、zscan方式渐进式删除,同时要注意防止bigkey过期时间自动删除问题,例如200万个zset设置1小时过期,会触发del操作,造成阻塞

String:

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

Hash:

使用hscan每次获取少量field-value,再使用hdel删除每个field

list:

使用ltrim渐进式逐步删除

Set:

使用sscan每次获取少量元素,再使用srem删除每个元素

ZSet:

使用zscan每次获取少量元素,再使用zremrangebyrank删除每个元素

优化

开启惰性删除

lazyfree-lazy-server-del yes
replica-lazy-flush yes


lazyfree-lazy-user-del yes

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值