Redis中BigKey问题
BigKey
100w数据导入redis
生产中不允许Key *
生产上限制keys */flushdb/flushall等危险命令以防止误删误用?
通过配置设置禁用这些命令,redis.conf在SECURITY这一项中
可以用 scan命令-----Scan命令用于迭代数据库中的数据库键
语法
SACN cursor [MATCH pattern] [COUNT count]
cursor-游标 pattern-匹配的模式 count-指定从数据表返回多少元素,默认值为10
基于游标的迭代器,需要基于上一次的游标延续之前的迭代过程以O作为游标开始一次新的迭代,直到命令返回游标0完成一次遍历不保证每次执行都返回某个给定数量的元素,支持模糊查询一次返回的数量不可控,只能是大概率符合count参数
什么算大Key
String 是value 最大512MB但是≥10KB就是BigKey
lsit、hash、set和zset,个数超过5000就是bigKey
带来的危害
内存不均,集群迁移困难
超时删除,大Key删除作梗
网络流量阻塞
如何发现
MEMORY USAGE 键
如何删除---阿里巴巴开发手册
渐进式删除---举例子
Redis Ltrim对一个列表进行修剪(trim),就是说,让列表只保留指定区间内的示素,不在指定区间之内的元素都将被删除。
下标0表示列表的第一个元素,以1表示列表的第二个元素,以此类推。你也可以使用负数下标,以-1表示列表的最后一个元素,-2表示列表的倒数第二个元素,以此类推。
语法命令:
#=========redis 集群===========
spring.redis.password=
#获取失败 最大重定向次数
spring.redis.cluster.max-redirects=3
spring.redis.lettuce.pool.max-active=8
spring.redis.lettuce.pool.max-wait=-1ms
spring.redis.lettuce.pool.max-idle=8
spring.redis.lettuce.pool.min-idle=0
#============================修改地方==============
#支持集群拓扑动态感应刷新,自适应拓扑刷新是否使用所有可能的更新,默认false关闭
spring.redis.lettuce.cluster.refresh.adaptive=true
#刷新时间
spring.redis.lettuce.cluster.refresh.period=2000
#==================================================
#一个主一个从
spring.redis.cluster.nodes=192.168.126.130:6379,192.168.126.131:6379
set
使用SSCAN 每次获取部分元素,在使用srem命令删除每个元素
Zset
使用zscan 每次互殴去部分元素,在使用ZREMRANGEBYRANK命令删除每个元素
BigKey调优 ,了解惰性释放lazyfree!
Bigkey 生产调优,redis.conf配置文件LAZY FREEING相关说明
自带{阻塞和非阻塞}删除命令
修改方式: