Redis的数据删除策略
Redis的数据可以设置有效时间,当Redis数据失效时,Redis有多种机制来清除失效的数据。
Redis 提供了三种删除策略:1. 定时删除 ;2. 惰性删除 ; 2. 定期删除。
定时删除
当 key 设置过期时间的时候,创建一个定时器事件,当 key 过期时间到达时,由定时器任务立即执行对 key 的删除操作,删除操作先删除存储空间的,再移除掉 expire 的 key
优点:节约内存,到时就删除,快速释放掉不必要的内存占用
缺点:CPU 压力大,无论 CPU 此时负载量多高,都会去占用 CPU 进行 key 的删除操作,会影响 Redis 服务器响应时间和吞吐量,是一种比较低效的方式。
结论:用 CPU 性能换取内存空间,时间换空间
惰性删除
数据到达超时时间的,不立即处理,等下次访问该数据的时候,再去删除(操作会执行expireIfNeeded()函数去检查)
优点:不占用 CPU 节约 CPU 性能,只在获取访问key的时候才判断是否过期,过期则删除,只会删除当前获取的这一个key,其他的key还是保持原样
缺点:内存占用大,如果一直没有获取它,那么数据就会长期占用内存空间,当有大量的key没有被使用到,也造成了大量内存浪费。
结论:空间换时间
定期删除
前面两个是两个极端的方法,为避免前面方案带来的问题,Redis 引入了定期删除策略(折中方案)
周期性轮询 Redis 库中的时效性数据,采取随机抽取的策略,利用过期数据占比的方式控制删除频度。
在Redis服务器初始化时,读取server.hz的值,默认值为10。
定时轮询服务器,每秒钟执行server.hz次serverCron() 函数。
databaseCron() 在后台轮询处理 16 个 redis 数据库的操作,如这里的过期 key 的处理activeExpireCycle(),对每个数据库的expire空间进行检测,每次执行250ms/server.hz
随机选取一批expire空间的 key(redis有16个数据库,从0号数据库开始—15号数据库)
删除这批 key 中已过期的
如果这批 key 中已过期的占比超过25%,那么再重复执行步骤一。(循环到小于25%结束当前数据库的删除)
如果这批 key 中已过期的占比 ≤ 25%,检测下一个数据库的expire空间(current_db++)
结论:CPU 性能占用设置有峰值,检测的频度可自定义设置,内存压力不是很大,长期占用内存的冷数据会被持续清理(周期性随机抽查,重点抽查)。
Redis的数据删除策略相关推荐
- redis 数据删除策略
Redis是一种内存级数据库,所有数据均存放在内存中,内存中的数据可以通过TTL指令获取其状态,Redis 的数据删除策略,就是在内存和CPU中找一个平衡点,避免redis性能下降,甚至服务器宕机或者 ...
- Redis学习总结(数据类型、持久化、事务、数据删除策略、主从复制、哨兵、缓存雪崩等)
Redis学习总结 1.Redis是什么 1.概念 2.特点 3.应用场景 2.Linux环境安装redis 3.Redis的数据存储格式 1.String类型 1.String类型的常用操作 2.S ...
- Redis三种删除策略
首先我们先说一下redis删除的是过期数据,而什么是过期数据呢?过期数据就是设置了有效性的数据到达了过期时间的数据. TTL指令获取数据状态 返回时间:具有时效性的数据 返回-1:表示永久有效的数据 ...
- [Redis] Resid的删除策略
目录 Redis中的数据特征 数据删除策略 2.1定时删除 2.2 惰性删除 2.3 定期删除 删除策略比对 Redis中的数据特征 Redis是一种内存级数据库,所有数据均存放在内存中,内存中的数据 ...
- php redis hset过期时间,详解Redis中数据过期策略
相信大家对Redis中数据过期有点了解,本文主要介绍了Redis中的数据过期策略,文中通过示例代码介绍的很详细,相信对大家的理解和学习具有一定的参考借鉴价值,有需要的朋友可以参考借鉴,希望能帮助到大家 ...
- redis 数据删除策略和逐出算法
数据存储和有效期# 在 redis 工作流程中,过期的数据并不需要马上就要执行删除操作.因为这些删不删除只是一种状态表示,可以异步的去处理,在不忙的时候去把这些不紧急的删除操作做了,从而保证 redi ...
- Redis 过期键删除策略、内存淘汰机制
文章目录 过期键删除策略 定时删除 惰性删除 定期删除 Redis的选择 内存淘汰机制 redis中缓存的数据是有过期时间的,当缓存数据失效时,redis会删除过期数据以节省内存,那redis是怎样怎 ...
- 2022-04-12 redis过期key删除策略
1 定时删除: 在设置键过期时间的同时,创建一个定时器,让定时器在过期时间来临时,立即执行对键的删除操作; 这样做有一个弊端,就是当有很多key同一时间过期的时候,会造成一时间的CPU紧张,从而可能影 ...
- Redis过期数据的删除策略
Redis是一种内存级数据库,所有数据均存放在内存中,内存中的数据可以通过TTL指令获取其状态 XX :具有时效性的数据 -1 :永久有效的数据 -2 :已经过期的数据或被删除的数据或未定义的数据 r ...
最新文章
- python论坛哪些好-好的python论坛
- PHP的getimagesize获取图像信息
- Jetbrains全系列完美破解--------亲测可用
- elementUI vxe-table结合使用(通用表格)
- 随机样本一致性:一种用于图像分析和自动制图的模型拟合模型(5)--(P4P的解析解)
- 新浪2017校园招聘---C++后台研发
- android快速充电实现_Android 8.0 慢充和快充提示语的实现原理
- 新型肺炎数据,可以用Excel绘制成3维地图
- C/C++回调方式系列之二class接口回调和lambda程式
- 9套Android实战经典项目
- java控制台进度_java进度条:控制台输出百分比示例代码
- python画图库哪个好_python常见的十种可视化图库方法展示
- 带你深入了解 DNS 解析原理-递归与迭代
- 生活在压力下不得不读的好书---《此生未完成》读后感
- 实时展示摄像头内容(go server + electron-vue client)
- 51nod1127 最短的包含字符串
- 从存活了1441年的企业,我们能学到什么?
- 硅谷最干货大会之一AI Frontiers 详解全球投资热区和5大应用趋势
- Java 添加、读取、删除PPT文档属性
- TPM、TCM分别是什么?