Redis——BigKey

打印 上一主题 下一主题

主题 1021|帖子 1021|积分 3063

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?立即注册

x
1. MoreKey

        当redis key的数量过多时,使用keys*会泯灭大量时间和性能,因此在生产上必要禁用一些危险下令。
如何禁用下令

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

例如禁用keys,flushdb,flushall
  1. rename-command keys ""
  2. rename-command flushdb ""
  3. rename-command flushall ""
复制代码
禁用keys*如何迭代查询key

使用scan下令,此外SSCAN用于set类型,HSCAN用于Hash类型,ZSCAN用于ZSet类型
  1. SCAN cursor [MATCH pattern][count count]
  2. // pattern 匹配模式
  3. // count 迭代数量,默认10
复制代码
遍历key时将cursor设为0,执行scan会返回一个游标值,下一次迭代从该游标值开始,当返回游标值为0时完成一次遍历

 查找以tk开头的key
 

2. BigKey

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



  • 内存不均,集群迁徙困难
  • 超时删除
  • 网络流量壅闭
如何发现

方法一:--bigkeys 
  1. 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删除每个元素
优化

开启惰性删除
  1. lazyfree-lazy-server-del yes
  2. replica-lazy-flush yes
  3. lazyfree-lazy-user-del yes
复制代码
 

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

知者何南

论坛元老
这个人很懒什么都没写!
快速回复 返回顶部 返回列表