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的数据删除策略相关推荐

  1. redis 数据删除策略

    Redis是一种内存级数据库,所有数据均存放在内存中,内存中的数据可以通过TTL指令获取其状态,Redis 的数据删除策略,就是在内存和CPU中找一个平衡点,避免redis性能下降,甚至服务器宕机或者 ...

  2. Redis学习总结(数据类型、持久化、事务、数据删除策略、主从复制、哨兵、缓存雪崩等)

    Redis学习总结 1.Redis是什么 1.概念 2.特点 3.应用场景 2.Linux环境安装redis 3.Redis的数据存储格式 1.String类型 1.String类型的常用操作 2.S ...

  3. Redis三种删除策略

    首先我们先说一下redis删除的是过期数据,而什么是过期数据呢?过期数据就是设置了有效性的数据到达了过期时间的数据. TTL指令获取数据状态 返回时间:具有时效性的数据 返回-1:表示永久有效的数据 ...

  4. [Redis] Resid的删除策略

    目录 Redis中的数据特征 数据删除策略 2.1定时删除 2.2 惰性删除 2.3 定期删除 删除策略比对 Redis中的数据特征 Redis是一种内存级数据库,所有数据均存放在内存中,内存中的数据 ...

  5. php redis hset过期时间,详解Redis中数据过期策略

    相信大家对Redis中数据过期有点了解,本文主要介绍了Redis中的数据过期策略,文中通过示例代码介绍的很详细,相信对大家的理解和学习具有一定的参考借鉴价值,有需要的朋友可以参考借鉴,希望能帮助到大家 ...

  6. redis 数据删除策略和逐出算法

    数据存储和有效期# 在 redis 工作流程中,过期的数据并不需要马上就要执行删除操作.因为这些删不删除只是一种状态表示,可以异步的去处理,在不忙的时候去把这些不紧急的删除操作做了,从而保证 redi ...

  7. Redis 过期键删除策略、内存淘汰机制

    文章目录 过期键删除策略 定时删除 惰性删除 定期删除 Redis的选择 内存淘汰机制 redis中缓存的数据是有过期时间的,当缓存数据失效时,redis会删除过期数据以节省内存,那redis是怎样怎 ...

  8. 2022-04-12 redis过期key删除策略

    1 定时删除: 在设置键过期时间的同时,创建一个定时器,让定时器在过期时间来临时,立即执行对键的删除操作; 这样做有一个弊端,就是当有很多key同一时间过期的时候,会造成一时间的CPU紧张,从而可能影 ...

  9. Redis过期数据的删除策略

    Redis是一种内存级数据库,所有数据均存放在内存中,内存中的数据可以通过TTL指令获取其状态 XX :具有时效性的数据 -1 :永久有效的数据 -2 :已经过期的数据或被删除的数据或未定义的数据 r ...

最新文章

  1. python论坛哪些好-好的python论坛
  2. PHP的getimagesize获取图像信息
  3. Jetbrains全系列完美破解--------亲测可用
  4. elementUI vxe-table结合使用(通用表格)
  5. 随机样本一致性:一种用于图像分析和自动制图的模型拟合模型(5)--(P4P的解析解)
  6. 新浪2017校园招聘---C++后台研发
  7. android快速充电实现_Android 8.0 慢充和快充提示语的实现原理
  8. 新型肺炎数据,可以用Excel绘制成3维地图
  9. C/C++回调方式系列之二class接口回调和lambda程式
  10. 9套Android实战经典项目
  11. java控制台进度_java进度条:控制台输出百分比示例代码
  12. python画图库哪个好_python常见的十种可视化图库方法展示
  13. 带你深入了解 DNS 解析原理-递归与迭代
  14. 生活在压力下不得不读的好书---《此生未完成》读后感
  15. 实时展示摄像头内容(go server + electron-vue client)
  16. 51nod1127 最短的包含字符串
  17. 从存活了1441年的企业,我们能学到什么?
  18. 硅谷最干货大会之一AI Frontiers 详解全球投资热区和5大应用趋势
  19. Java 添加、读取、删除PPT文档属性
  20. TPM、TCM分别是什么?

热门文章

  1. 【LFS】Cjktty+uim-fep实现Linux控制台下中文显示与输入
  2. Fakelocation模拟KEEP运动记录
  3. 手机用户为什么药买正规原装的手机充电器?
  4. 单链表指针和头结点的理解
  5. 内网渗透研究:LLMNR和NetBIOS欺骗攻击分析
  6. python编程游戏代码tkinter,python编程游戏代码大全
  7. gcc 版本升级详细记录
  8. 前端适配放大缩小比例
  9. 投影仪连线和全屏显示
  10. 关于cvCvtColor的用法