MENU

Redis中BigKey问题

BigKey

100w数据导入redis

image-20230521010543549

生产中不允许Key *

image-20230521011135768

生产上限制keys */flushdb/flushall等危险命令以防止误删误用?

通过配置设置禁用这些命令,redis.conf在SECURITY这一项中

image-20230521172338919

可以用 scan命令-----Scan命令用于迭代数据库中的数据库键

语法

SACN cursor [MATCH pattern] [COUNT count]

cursor-游标 pattern-匹配的模式 count-指定从数据表返回多少元素,默认值为10

​ 基于游标的迭代器,需要基于上一次的游标延续之前的迭代过程以O作为游标开始一次新的迭代,直到命令返回游标0完成一次遍历不保证每次执行都返回某个给定数量的元素,支持模糊查询一次返回的数量不可控,只能是大概率符合count参数

image-20230521173922618

什么算大Key

image-20230521174501618

String 是value 最大512MB但是≥10KB就是BigKey

lsit、hash、set和zset,个数超过5000就是bigKey

带来的危害

内存不均,集群迁移困难

超时删除,大Key删除作梗

网络流量阻塞

如何发现

image-20230521175105046

MEMORY USAGE 键

如何删除---阿里巴巴开发手册

image-20230524135424408

渐进式删除---举例子

image-20230524135851087

image-20230527023853189

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

image-20230527145118403

image-20230527145425400

set

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

image-20230527150606301

image-20230527150619565

Zset

使用zscan 每次互殴去部分元素,在使用ZREMRANGEBYRANK命令删除每个元素

image-20230527150839022

image-20230527150920618

BigKey调优 ,了解惰性释放lazyfree!

Bigkey 生产调优,redis.conf配置文件LAZY FREEING相关说明

自带{阻塞和非阻塞}删除命令

修改方式:

image-20230527151631759

Leave a Comment