三种删除策略

·定时删除:在设置键的过期时间的同时,创建一个定时器(timer),让定时器在键的过期时间来临时,立即执行对键的删除操作。

·惰性删除:放任键过期不管,但是每次从键空间中获取键时,都检查取得的键是否过期,如果过期的话,就删除该键;如果没有过期,就返回该键。
·定期删除:每隔一段时间,程序就对数据库进行一次检查,删除里面的过期键。至于要删除多少过期键,以及要检查多少个数据库,则由算法决定。

优缺点

定时删除 对内存是有好的能够尽快删除过期键来释放内存,但是对cpu不友好过期键比较多的话删除行为就会占用相当一部分cpu影响性能

惰性删除 对CPU最友好、只有查出键时才检查是否过期,但是对内存不够友好,会占用大量内存不能及时释放

定期删除 是定期删除和惰性删除的折中、但是依赖删除操作执行时长和频率的设定。不合理的话也会存在上面两种问题;

实现

惰性删除策略的实现

过期键的惰性删除策略由db.c/expireIfNeeded函数实现,所有读写数据库的Redis命令在执行之前都会调用expireIfNeeded函数对输入键进行检查:

定期删除策略的实现

过期键的定期删除策略由redis.c/activeExpireCycle函数实现,每当Redis的服务器周期性操作redis.c/serverCron函数执行时,activeExpireCycle函数就会被调用,它在规定的时间内,分多次遍历服务器中的各个数据库,从数据库的expires字典中随机检查一部分键的过期时间,并删除其中的过期键。

redis 提供 6种数据淘汰策略(内存溢出控制策略):

  1. volatile-lru:从已设置过期时间的数据集(server.db[i].expires)中挑选最近最少使用的数据淘汰
  2. volatile-ttl:从已设置过期时间的数据集(server.db[i].expires)中挑选将要过期的数据淘汰
  3. volatile-random:从已设置过期时间的数据集(server.db[i].expires)中任意选择数据淘汰
  4. allkeys-lru:当内存不足以容纳新写入数据时,在键空间中,移除最近最少使用的key(这个是最常用的)
  5. allkeys-random:从数据集(server.db[i].dict)中任意选择数据淘汰
  6. no-eviction:禁止驱逐数据,也就是说当内存不足以容纳新写入数据时,新写入操作会报错。这个应该没人使用吧!

4.0版本后增加以下两种:

  1. volatile-lfu:从已设置过期时间的数据集(server.db[i].expires)中挑选最不经常使用的数据淘汰
  2. allkeys-lfu:当内存不足以容纳新写入数据时,在键空间中,移除最不经常使用的key

参考

https://snailclimb.gitee.io/javaguide/#/database/Redis/Redis JavaGuide

黄健宏 著. Redis设计与实现 (Chinese Edition) (Kindle 位置 1903-1907). Kindle 版本.

redis 过期删除策略和淘汰策略 -redis设计与实现笔记相关推荐

  1. Redis过期删除策略和内存淘汰策略

    目录 一.过期删除策略 1.如何设置过期时间? 2.如何判定 key 已过期了? 3.过期删除策略有哪些? 1.定时删除策略 2.惰性删除策略 3.定期删除策略 4.Redis 过期删除策略 5.Re ...

  2. 面试官:Redis 过期删除策略和内存淘汰策略有什么区别?

    作者:小林coding 计算机八股文网站:https://xiaolincoding.com 大家好,我是小林. Redis 的「内存淘汰策略」和「过期删除策略」,很多小伙伴容易混淆,这两个机制虽然都 ...

  3. Redis的持久化机制、过期策略、淘汰策略

    文章目录 一.持久化机制 1. RDB机制 2. AOF机制 RDB的优缺点 AOF的优缺点 持久化机制选择 二.过期策略 常见过期策略 Redis过期策略 1. 定期删除 2. 惰性删除 RDB对过 ...

  4. Redis(五)Redis内存维护方案(过期策略及淘汰策略)

    目录 内存维护解决方案 过期策略 内存淘汰策略 内存维护解决方案 在Redis的配置文件中redis.conf 中memeory managment # maxmemory <bytes> ...

  5. Redis 过期策略和淘汰策略

    1.Redis 过期策略 Redis 过期策略用于处理设置了缓存时间的数据,使用定时扫描和惰性删除机制删除到期的缓存数据. Redis 将设置了过期时间的 key 保存在一个独立的字典中,定时扫描就是 ...

  6. redis过期策略与淘汰策略

    redis过期策略与淘汰策略 1.过期策略 2.淘汰策略 3.在哪里配置? 4.Lazy Free 1.过期策略 1.redis中所有的key都可以通过expire命令来设置过期时间,所有被设置了过期 ...

  7. redis的过期策略和淘汰策略

    过期键删除策略 1.定时删除:在设置键的过期时间的同时,创建一个定时器timer,让定时器在键过期时间来临时,立即执行对键的删除操作. 2.惰性删除:放任键过期不管,但是每次从键空间中获取键时,都检查 ...

  8. 数据结构(字典,跳跃表)、使用场景(计数器、缓存、查找表、消息队列、会话缓存、分布式锁)、Redis 与 Memcached、 键的过期时间、数据淘汰策略、持久化(RDB、AOF)

    1. 数据结构 1.1 字典 dictht 是一个散列表结构,使用拉链法保存哈希冲突的 dictEntry /* This is our hash table structure. Every dic ...

  9. redis 存储数据不设置过期时间 会自动过期吗_Redis-数据淘汰策略持久化方式(RDB/AOF)Redis与Memcached区别...

    Redis与Memcached区别: 两者都是非关系型数据库.主要有以下不同: 数据类型: Memcached仅支持字符串类型. redis支持:String,List,set,zset,hash 可 ...

  10. redis的删除策略和淘汰策略

    删除策略:是当数据到期,redis对过期数据的处理策略. 1.定时删除:当某一个key的过期时间到达后,redis就把对应的value和key删除. 优点是省内存,能快速的把过期数据删除腾出空间. 缺 ...

最新文章

  1. [转载]AIX 上 Lotus Domino 的内存使用
  2. struts2+hibernate3+spring3(ssh2)框架下的web应用(1)
  3. Linux内存 性能调优
  4. android简单服务器的搭建
  5. 为什么element的el-backtop会不管用,来看这里!
  6. 女程序员怀孕7个月坚持上班敲代码
  7. mysql保存emoji报java.sql.SQLException: Incorrect string value: '\xF0\x9F\x98\x8B'
  8. linux crontab sleep,linux crontab 执行任务(7秒执行)
  9. linux crontab 每5分钟执行一次_linux面试题:Linux定时任务必备技能有哪些?
  10. [转载]转,Oracle中关于处理小数点位数的几个函数,取小数位数,Oracle查询函数...
  11. android 项目将csv文件写入sqlite数据库 代码,如何将csv文件大容量插入sqlite c#
  12. 分享2款XSHELL配色方案及导入配色方案的方法
  13. 蓝桥杯2019年第十届C/C++省赛A组第四题-迷宫
  14. 怎么下载小程序图片 ?
  15. Word中插入图片只显示一部分
  16. 如何配置log4j每天产生日志,并且当天日志大于10M时自动生成另一个文件
  17. FreeMarker导出word遇到的坑
  18. Kubernetes(k8s)的Secret以密文的方式存储数据
  19. 命令启动edge浏览器且全屏
  20. 移植Linux 3.4.2内核到JZ2440开发板(超精讲)

热门文章

  1. 【数学建模】数学建模指导:建模常用算法应用场景解析
  2. echart 世界地图发光_使用echart.js来绘制世界地图
  3. 杰控连接mysql_杰控FameView软件首秦ERP系统L2级中的应用
  4. linux系统下载乌班图,乌班图系统下载-乌班图Linux系统下载 V20.04官方版-KK下载站...
  5. 大数据shipin教程_大数据视频教程百度网盘下载
  6. 可预见的数字化未来:在雄安再造爱沙尼亚
  7. 离散数学杜忠复版答案_离散数学第2版答案
  8. javaScript入门
  9. 【MFC自绘窗口】 窗口设计第一课
  10. 2021年游戏项目的十大编程语言:C++、Java、JavaScript、Python均在榜上