Redis BigKey问题

这篇具有很好参考价值的文章主要介绍了Redis BigKey问题。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

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

Redis BigKey问题
游标从0开始,执行命令后返回下一次游标,知道下一次游标为0.则查询结束。

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

通过配置禁用这些命令,redis.conf的1066行下的
rename-command这一项中进行配置
rename-command keys “”
rename-command flushdb “”
rename-command flushall “”
或则配置一个极难拼写的字符串 比如
rename-command CONFIG b840fc02d524045429941cc15f59e41cb7be6c52文章来源地址https://www.toymoban.com/news/detail-461618.html

到了这里,关于Redis BigKey问题的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 借助KafkaTool在海量Kafka数据快速精准定位/查询目标数据

    解决方案:Kafka命令 + KafkaTool 参数说明: $ip:Kafka服务IP。 $port:Kafka服务端口。 ${topic.name}:要查询的主题。 $timestamp:要查询的时间点(时间戳进行转换的时候要精确到秒)。 其他说明:该命令在Kafka的bin目录下,所以需要跳转到该bin目录下执行该指令(已添加到环境变量

    2024年02月15日
    浏览(48)
  • Redis的MoreKey和BigKey问题

    大批量往Redis里面插入200w测试数据key 在Linux Bash下面执行,插入200w数据 使用命令 tail -10 redisTest.txt 查看最后10行记录 通过redis提供的管道 --pipe命令插入200W大批量数据 time用于查看耗时多长 可以看出插入200w条数据,耗时才不到6秒,还是非常快的 尝试使用 keys * ,查看所有的

    2023年04月19日
    浏览(37)
  • 商城项目-es的海量查询/聚合/数据同步

    1.sql表 用户数据库: tb_user:用户表,其中包含用户的详细信息 tb_address:用户地址表 商品数据库 tb_item:商品表 订单数据库 tb_order:用户订单表 tb_order_detail:订单详情表,主要是订单中包含的商品信息 tb_order_logistics:订单物流表,订单的收货人信息 2.模块搭建 feign-api:是

    2024年01月21日
    浏览(43)
  • 执行Lua脚本后一直查询不到Redis中的数据(附带问题详细排查过程,一波三折)

    这个问题坑惨我了,估计耗费了我两个小时😫,中间走了不少弯路,好在我灵光一闪+GPT给我的灵感否则就栽在这上面了 问题背景 在使用 Redis 实现接口调用次数扣减操作时,发现响应结果一直返回的是 -1,也就是查询不到数据 问题排查过程1 : 经过一段排查,加上GPT的提示

    2024年02月13日
    浏览(48)
  • 面试官:如何遍历 Redis 中的海量数据?

    来源:https://www.toutiao.com/article/6697540366528152077/ 有时候我们需要知道线上的 redis的使用情况 ,尤其需要知道一些 前缀的key值 ,让我们怎么去查看呢?今天给大家分享一个小知识点! 因为我们的用户 token缓存是采用了【user_token:userid】格式的key ,保存用户的token的值。我们运

    2024年02月11日
    浏览(42)
  • Redis之bigkey

    目录 1、什么是bigkey? 2、bigkey大的小 3、bigkey有哪些危害? 4、bigkey如何产生? 5、bigkey如何发现? 6、bigkey如何删除? 7、BigKey调优,惰性释放lazyfree 8、生产上限制keys * /flushdb/flushall等危险命令防止误删误用 9、SCAN命令 1、什么是bigkey? bigkey通常用来描述存储大量数据的键。

    2024年01月15日
    浏览(35)
  • 电商平台数据查询工具(京东数据分析软件)

    ​“京东爆款如何打造”是很多商家都头疼的问题。 下面,6个步骤分享给大家。 首先是选品。对于处于不同阶段的商家来说,选品方式不同。 针对正准备开店的商家,选品可通过以下方式: (1)市场分析和自身情况,确定主打品类。 (2)行业市场和京东平台市场、品类

    2024年02月04日
    浏览(52)
  • 第十三章_Redis中的BigKey

    MoreKey案例 大批量往redis里面插入2000W测试数据key  Linux Bash下面执行,插入100W # 生成100W条redis批量设置kv的语句(key=kn,value=vn)写入到/tmp目录下的redisTest.txt文件中 for((i=1;i=100*10000;i++)); do echo \\\"set k$i v$i\\\" /tmp/redisTest.txt ;done; 通过redis提供的管道--pipe命令插入100W大批量数据 结合自己

    2024年02月03日
    浏览(41)
  • 【redis】redis获取hash结构的海量数据,hgetAll、hscan、hkeys 性能大比拼

    根据上一篇文章:【Redis】 redis hash getKey getValue 两个的性能差别 我们知道hgetAll的性能是极差的,然后我们优化成hkeys的,但是hkeys真的好吗? 下面我们来说一下我们的现场,就是现场我们

    2024年01月22日
    浏览(31)
  • 【案例实战】SpringBoot整合Redis实现缓存分页数据查询

    正式观看本文之前,设想一个问题,高并发情况下,首页列表数据怎么做? 类似淘宝首页,这些商品是从数据库中查出来的吗?答案肯定不是,在高并发的情况下,数据库是扛不住的,那么我们要怎么去扛住C端大并发量呢,这块我们可以借助Redis,我们知道Redis是一个基于内

    2024年02月09日
    浏览(53)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包