Redis BigKey问题

news/2024/11/17 6:43:17/

1.广告平台,海量数据查询固定前缀的key

不要使用keys , 使用 scan 命令
scan 0 match "user:
" 10

2.Memory usage命令用过吗

memory usage key [semples count] :计算每个键值对的字节数

3.bigKey 问题,多大算bigKey,如何发现?如何处理?如何删除

string 类型控制在10k以内,hash,list,set,zset元素个数不要超过5k,
反例:一个包含200w个元素的list
非字符串的bigkey,不要使用del删除,使用hscan,sscan,zscan的方式渐进式删除,同时防止bigkey过期自动删除问题,例如一个200w元素的list设置一个小时过期,会触发del操作。会造成阻塞。
del命令是一种同步命令,即它会阻塞客户端,
与del命令不同的是,unlink命令会异步地删除指定的键以及与之相关联的值。即,它会将要删除的键添加到一个待删除的列表中,并立即返回,不会阻塞客户端。Redis服务器会在后台异步地删除待删除列表中的键。

综上:
String :值最大是512M,但超过10kb就是bigkey
list,hash,set和zset:最大个数是40多亿个,但是个数超过5000就是 bigkey

那些危害?
网络阻塞,过期阻塞删除耗时长。

如何产生的?
热销品的收藏量,明星的粉丝逐步增长。

如何排查?
redis-cli --bigkeys
redis-cli --bigkeys -i 0.1
给出每种数据类型 TOP 1的bigkey,同时给出键值个数及平均值。
每隔100条scan命令就会休眠0.1s,ops就不会剧烈抬升,但是扫描时间会变长

如果想查询大于10kb的所有key, --bigkey参数就无能为力了,需要使用 memory usage来计算每个键值的字节数。

如何删除bigkey?
渐进式删除,
string : del 命令 或者 unlink
hash: 使用 hscan每次获取少量的 key-value,再使用hdel删除每个flied.

4.bigKey 如何调优,惰性释放 lazy-free了解吗

reids 默认的过期删除del,阻塞的,如果是一个bigkey,可能需要几秒钟
而 unlink, flushDB async 等是异步非阻塞的
需要在redis.conf 的 lazy-free 向中配置
lazyfree-lazy-server-del no 改为yes
lazyfree-lazy-flush no 改为 yes
lazyfree-lazy-user-del 改为 yes

5.moreKey 问题,生产上有1000w记录,如何遍历?keys* 可以吗

小数据量可以使用key*,为了良好的习惯,建议还是别用。
keys * 也是原子命令,数据大会导致redis长时间锁住及CPU飙升,生产杜绝使用。
比如 100w的数据,一般机器需等待2-3s, 1000w的数据 长则20-30s.
在这么长 时间内,所有其他读写命令都会延后甚至报错,随着命令的积压,可能会造成缓存雪崩,甚至数据库宕机。

那我们如何变流key 呢
使用scan命令!类似mysql的limit
sscan 针对于string, 迭代 集合键中的元素
hscan 针对于 hash,迭代哈希键中的键值对
zscan 针对于 zset,迭代有序集合中的元素(包括元素成员和元素分值)

SCAN cursor [MATCH pattern] [COUNT count]
cursor - 游标。
pattern - 匹配的模式。
count - 指定从数据集里返回多少元素,默认值为 10

在这里插入图片描述
游标从0开始,执行命令后返回下一次游标,知道下一次游标为0.则查询结束。

6.如何生产上限制 keys */flushdb/flushall 等危险命令以防止误删勿用

通过配置禁用这些命令,redis.conf的1066行下的
rename-command这一项中进行配置
rename-command keys “”
rename-command flushdb “”
rename-command flushall “”
或则配置一个极难拼写的字符串 比如
rename-command CONFIG b840fc02d524045429941cc15f59e41cb7be6c52


http://www.ppmy.cn/news/89581.html

相关文章

kafka本地测试消息

一安装JDK 二zookeeper安装 Apache ZooKeeper conf下修改cfg文件名 为zoo.cfg 打开该文件编辑 配置环境变量 右击电脑--属性--高级系统设置--选择环境变量 新建系统变量 变量名:ZOOKEEPER_HOME 变量值为zookeeper的路径 然后编辑环境变量Path 新增%ZOOKEEPER…

Python网络爬虫:Scrapy和Beautiful Soup的使用和数据处理技巧

章节一:引言 在当今互联网时代,数据的价值越来越被重视,而网络爬虫作为一种强大的工具,可以帮助我们从互联网中提取有用的数据。Python作为一门广泛应用于数据科学和网络开发的编程语言,有着丰富的库和框架来支持网络…

基于Redis的Java分布式锁,接口并发处理,并发方案

Redis的分布式锁很多人都知道,比如使用Jedis的setNx、incr等方法都可以实现分布式锁的功能,但是Jedis需要自己管理连接池,就稍微麻烦一点。 今天介绍的是使用RedisTemplate切面编程自定义注解SPEL来实现分布式锁的功能,封装完成后…

低代码平台活字格,让我们一起感受低代码平台活字格的魅力

一份耕耘,一份收获,一段工作经历,让我认识了活字格。感觉活字格绝对是同类产品中的佼佼者。简单的拖拉拽,就实现一个完美的WEB页面,并且可做到前后端分离与交互。有了他,不擅长前端的我,也能大显身手了。告…

【dfs和bfs时间复杂度超时了,怎么优化呢?双向优化】【双向dfs——送礼物】【双向bfs——字串变换】

预习 笔记 复习 做题 专注 效率 记忆 欢迎观看我的博客,如有问题交流,欢迎评论区留言,一定尽快回复!(大家可以去看我的专栏,是所有文章的目录)   文章字体风格: 红色文字表示&#…

六种基本网络拓扑结构详解

目录 1、总线型网络拓扑结构 2、星型网络拓扑结构 3、环形网络拓扑结构 4、树型网络拓扑结构 5、网状网络拓扑结构 6、混合网络型拓扑结构 常见的网络拓扑结构有以下6种:1.总线型网络拓扑结构;2.星型网络拓扑结构;3.环形网络拓扑结构&a…

chrome插件打包之后,显示此扩展程序可能已损坏

每日鸡汤,每个你想要学习的瞬间都是未来的你向自己求救 问题是这样的,我们有一个chrome插件的项目,但是我也没有参与开发,可以说此前对chrome插件一窍不通。但是今天呢,有个bug,要我改,我就拉一…

ASEMI代理韩景元可控硅C106M参数,C106M封装,C106M尺寸

编辑-Z 韩景元可控硅C106M参数: 型号:C106M 断态重复峰值电压VDRM:600V 通态电流IT(RMS):4A 通态浪涌电流ITSM:30A 平均栅极功耗PG(AV):0.2W 峰值门功率耗散PGM:1W 工作接点温度Tj&…