前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >Redis删除大key和大value问题

Redis删除大key和大value问题

作者头像
西柚dzh
发布于 2022-06-09 09:02:09
发布于 2022-06-09 09:02:09
2.3K0
举报
文章被收录于专栏:dcmickey小站dcmickey小站

1个大小200MB的String键(String Object最大512MB),内存空间占用较大;1个包含100000000(1kw)个字段的Hash键,对应访问模式(如hgetall)时间复杂度高

==测试 del 200MB String键耗时约1毫秒,而删除一个含有1kw个字段的Hash键,却会阻塞Redis进程数十秒==

在Redis集群中,应用程序尽量避免使用大键;直接影响容易导致集群的容量和请求出现”倾斜问题“

如果已经有大key了, 直接删除它,DEL命令可能阻塞Redis进程数十秒,对应用程序和Redis集群可用性造成严重的影响

一、直接删除大Key的风险

生产环境中遇到过多次因业务删除大Key,导致Redis阻塞,出现故障切换和应用程序雪崩的故障。测试删除集合类型大Key耗时,一般每秒可清理100w~数百w个元素; 如果数千w个元素的大Key时,会导致Redis阻塞上10秒可能导致集群判断Redis已经故障,出现故障切换;或应用程序出现雪崩的情况

Redis是单线程处理。单个耗时过大命令,导致阻塞其他命令,容易引起应用程序雪崩或Redis集群发生故障切换。所以避免在生产环境中使用耗时过大命令。

Redis删除大的集合键的耗时, 测试估算,可参考;和硬件环境、Redis版本和负载等因素有关

Key类型

Item数量

耗时

Hash

~100万

~1000ms

List

~100万

~1000ms

Set

~100万

~1000ms

Sorted Set

~100万

~1000ms

二、如何优雅地删除各类大Key

从Redis2.8版本开始支持SCAN命令,通过m次时间复杂度为O(1)的方式,遍历包含n个元素的大key.这样避免单个O(n)的大命令,导致Redis阻塞。 这里删除大key操作的思想也是如此。

==整体思路==

  1. 通过各自数据类型提供出来的scan每次扫描固定量级,比如500个
  2. 遍历这个500个 一次一个一个的调用删除动作

三、Redis Lazy Free

应该从3.4版本开始,Redis会支持==lazy delete free==的方式,删除大键的过程不会阻塞正常请求。

感兴趣的自己研究下~

四、禁用长耗时的查询命令

  Redis绝大多数的读写命令的时间复杂度都是在O(1)到O(N)之间,其中O(1)就可以放心使用,但是O(N)就要当心了,因为N表示不确定性,数据越大,查询的速度就会越慢,因为Redis只用一个线程来做数据查询,如果这些指令非常耗时,就会造成Redis的阻塞,那么就会造成大量的延时。

要避免O(N)类的命令对Redis性能造成的影响,就要从以下几个方面进行改造:   1、禁止使用key * 命令; 2、避免一次查询所有成员,要使用 scan 命令进行分批的、游标式的遍历 3、通过机制严格空指Hset、Set、Scorted Set 等数据结构的大小 4、将排序、并集、交集等操作放在客户端执行,以减少Redis服务器的运行压力 5、删除一个大的数据时,可能会需要很长的时间,所以建议用异步删除的方式unlink,他会启动一个新的线程来删除目标数据,而不是阻塞Redis主线程。

了解

一个正常规模的表并精简高频字段的用户表存储reids数据量 实际观察过一个9700多用户的表用string存 大概消耗7~8M内存 如果改为hashtable存9700多用户 大概消耗8~9M内存,比string略多一点点


版权属于:dingzhenhua

本文链接:https://cloud.tencent.com/developer/article/2019333

转载时须注明出处及本声明

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2021-10-13,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
使用Redis,你必须知道的21个注意要点「建议收藏」
最近在学习Redis相关知识,看了阿里的redis开发规范,以及Redis开发与运维这本书。分使用规范、有坑的命令、项目实战操作、运维配置四个方向,整理了使用Redis的21个注意点,希望对大家有帮助,一起学习哈
全栈程序员站长
2022/07/19
6550
使用Redis,你必须知道的21个注意要点「建议收藏」
Redis大key问题
在Redis中,大key指的是key对应的value值所占的内存空间比较大,例如一个字符串类型的value最大可以存储512MB的内容,一个列表类型的value最多可以存储2的32次方-1个元素,一般情况下,我们认为字符串类型的key的value值超过10kb,就算大key。
AsiaYe
2020/07/14
11.7K0
云数据库Redis开箱测评方法论:性能测试小结
今年的腾讯云双十一活动,玩出了新花样——“百款折扣商品任意拼,双人成团PK有大礼”!
后台技术汇
2024/11/17
1150
云数据库Redis开箱测评方法论:性能测试小结
面试官:redis中的大key要如何删除?
大家好,我是小义。今天来聊聊面试中的高频考点:如何处理redis缓存中的大key? 大 key 其实并不是指 key 的值很大,而是 key 对应的 value 很大,占了很大内存。
程序员小义
2024/04/19
1.3K0
面试官:redis中的大key要如何删除?
一文了解如何发现并解决Redis热key与大key问题
业务场景中经常会有各种热key或大key的问题,如果未能及时处理,可能会导致服务性能下降、用户体验变差,甚至引发大面积故障。所以本文针对这两个问题进行讲解,提供发现/监控的方法以及处理的解决方案。
全菜工程师小辉
2022/04/11
4.6K0
Redis-大key解决策略
首先大key不是key很大而是key对应的value值很大 一般而言如果String类型值大于10KB,Hash,Set,Zset,List类型的元素的个数大于5000个都可以称之为大key
才疏学浅的木子
2023/10/17
3120
Bigkey问题的解决思路与方式探索
在Redis运维过程中,由于Bigkey 的存在,会影响业务程序的响应速度,严重的还会造成可用性损失,DBA也一直和业务开发方强调 Bigkey 的规避方法以及危害。
2020labs小助手
2022/11/22
4190
Redis面试题总结(超详细)
针对以上的问题,Redis集群提供了较为完善的方案,解决了存储能力受到单机限制,写操作无法负载均衡的问题。
是阿超
2021/11/10
4.2K0
案例:Redis命令不当 引起数据库雪崩 造成数百万损失
最近的互联网线上事故发生比较频繁,9月19日网上爆料出顺丰近期发生了一起线上删库事件,在这里就不介绍了。
Debian中国
2018/12/21
1.6K0
java架构之路-(Redis专题)Redis的高性能和持久化
  上次我们简单的说了一下我们的redis的安装和使用,这次我们来说说redis为什么那么快和持久化数据
小菜的不能再菜
2019/10/23
3920
java架构之路-(Redis专题)Redis的高性能和持久化
redis的问题_redis高级数据类型
11.Redis的缓存优化方向有哪些?你们怎么理解的?对热点键的注意事项设计什么?
全栈程序员站长
2022/09/24
4930
redis的问题_redis高级数据类型
「查缺补漏」巩固你的Redis知识体系
链接: https://pan.baidu.com/s/1MJnzX_qRuNXJI09euzkPGA 提取码: 2c6w 复制这段内容后打开百度网盘手机App,操作更方便哦
Kerwin
2020/08/10
7460
「查缺补漏」巩固你的Redis知识体系
(三万字长文)面试不怂之redis与缓存大全
点击上方“芋道源码”,选择“设为星标” 管她前浪,还是后浪? 能浪的浪,才是好浪! 每天 10:33 更新文章,每天掉亿点点头发... 源码精品专栏 原创 | Java 2021 超神之路,很肝~ 中文详细注释的开源项目 RPC 框架 Dubbo 源码解析 网络应用框架 Netty 源码解析 消息中间件 RocketMQ 源码解析 数据库中间件 Sharding-JDBC 和 MyCAT 源码解析 作业调度中间件 Elastic-Job 源码解析 分布式事务中间件 TCC-Transaction
芋道源码
2022/03/04
3600
Redis中的bigkey问题解读
bigkey简单来说就是存储本身的key值空间太大,或者hash,list,set等存储中value值过多。
一个风轻云淡
2023/09/15
8180
2W字!详解20道Redis经典面试题!(珍藏版)
大家好,我是捡田螺的小男孩。金九银十即将到来,整理了20道经典Redis面试题,希望对大家有帮助。
捡田螺的小男孩
2021/09/08
8570
Redis 的 BigKey、HotKey 又引发了线上事故!
BigKey、HotKey是 日常生产中经常会碰到由于redis集群的不当访问,造成的线上问题。
码猿技术专栏
2023/05/01
7680
Redis 的 BigKey、HotKey 又引发了线上事故!
单线程的Redis为什么能支持10w+的QPS?
我们经常听到Redis是一个单线程程序。准确的说Redis是一个多线程程序,只不过请求处理的部分是用一个线程来实现的。
Java识堂
2021/03/11
2.8K0
单线程的Redis为什么能支持10w+的QPS?
面渣逆袭:Redis连环五十二问,图文详解,这下面试稳了!
大家好,我是老三,面渣逆袭系列继续,这节我们来搞定Redis——不会有人假期玩去了吧?不会吧?
三分恶
2022/05/11
1.3K0
面渣逆袭:Redis连环五十二问,图文详解,这下面试稳了!
Redis 基础、高级特性与性能调优 | 一文看全
本文将从Redis的基本特性入手,通过讲述Redis的数据结构和主要命令对Redis的基本能力进行直观介绍。之后在性能调优等方面进行更深入的介绍和指导。 概述 Redis 是一个开源的,基于内存的结构化数据存储媒介,可以作为数据库、缓存服务或消息服务使用。 Redis 支持多种数据结构,包括字符串、哈希表、链表、集合、有序集合、位图、Hyperloglogs 等。 Redis 具备 LRU 淘汰、事务实现、以及不同级别的硬盘持久化等能力,并且支持副本集和通过 Redis Sentinel 实现的高
小小科
2018/05/04
2.9K0
Redis 基础、高级特性与性能调优 |  一文看全
Redis 高效删除大key
大key(bigkey)是指 key 的 value 是个庞然大物,例如 Hashes, Sorted Sets, Lists, Sets,日积月累之后,会变得非常大,可能几十上百MB,甚至到GB。
dys
2019/10/30
7.5K0
相关推荐
使用Redis,你必须知道的21个注意要点「建议收藏」
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档