redis 过期删除策略和淘汰策略 -redis设计与实现笔记
三种删除策略
·定时删除:在设置键的过期时间的同时,创建一个定时器(timer),让定时器在键的过期时间来临时,立即执行对键的删除操作。
·惰性删除:放任键过期不管,但是每次从键空间中获取键时,都检查取得的键是否过期,如果过期的话,就删除该键;如果没有过期,就返回该键。
·定期删除:每隔一段时间,程序就对数据库进行一次检查,删除里面的过期键。至于要删除多少过期键,以及要检查多少个数据库,则由算法决定。
优缺点
定时删除 对内存是有好的能够尽快删除过期键来释放内存,但是对cpu不友好过期键比较多的话删除行为就会占用相当一部分cpu影响性能
惰性删除 对CPU最友好、只有查出键时才检查是否过期,但是对内存不够友好,会占用大量内存不能及时释放
定期删除 是定期删除和惰性删除的折中、但是依赖删除操作执行时长和频率的设定。不合理的话也会存在上面两种问题;
实现
惰性删除策略的实现
过期键的惰性删除策略由db.c/expireIfNeeded函数实现,所有读写数据库的Redis命令在执行之前都会调用expireIfNeeded函数对输入键进行检查:
定期删除策略的实现
过期键的定期删除策略由redis.c/activeExpireCycle函数实现,每当Redis的服务器周期性操作redis.c/serverCron函数执行时,activeExpireCycle函数就会被调用,它在规定的时间内,分多次遍历服务器中的各个数据库,从数据库的expires字典中随机检查一部分键的过期时间,并删除其中的过期键。
redis 提供 6种数据淘汰策略(内存溢出控制策略):
- volatile-lru:从已设置过期时间的数据集(server.db[i].expires)中挑选最近最少使用的数据淘汰
- volatile-ttl:从已设置过期时间的数据集(server.db[i].expires)中挑选将要过期的数据淘汰
- volatile-random:从已设置过期时间的数据集(server.db[i].expires)中任意选择数据淘汰
- allkeys-lru:当内存不足以容纳新写入数据时,在键空间中,移除最近最少使用的key(这个是最常用的)
- allkeys-random:从数据集(server.db[i].dict)中任意选择数据淘汰
- no-eviction:禁止驱逐数据,也就是说当内存不足以容纳新写入数据时,新写入操作会报错。这个应该没人使用吧!
4.0版本后增加以下两种:
- volatile-lfu:从已设置过期时间的数据集(server.db[i].expires)中挑选最不经常使用的数据淘汰
- allkeys-lfu:当内存不足以容纳新写入数据时,在键空间中,移除最不经常使用的key
参考
https://snailclimb.gitee.io/javaguide/#/database/Redis/Redis JavaGuide
黄健宏 著. Redis设计与实现 (Chinese Edition) (Kindle 位置 1903-1907). Kindle 版本.
redis 过期删除策略和淘汰策略 -redis设计与实现笔记相关推荐
- Redis过期删除策略和内存淘汰策略
目录 一.过期删除策略 1.如何设置过期时间? 2.如何判定 key 已过期了? 3.过期删除策略有哪些? 1.定时删除策略 2.惰性删除策略 3.定期删除策略 4.Redis 过期删除策略 5.Re ...
- 面试官:Redis 过期删除策略和内存淘汰策略有什么区别?
作者:小林coding 计算机八股文网站:https://xiaolincoding.com 大家好,我是小林. Redis 的「内存淘汰策略」和「过期删除策略」,很多小伙伴容易混淆,这两个机制虽然都 ...
- Redis的持久化机制、过期策略、淘汰策略
文章目录 一.持久化机制 1. RDB机制 2. AOF机制 RDB的优缺点 AOF的优缺点 持久化机制选择 二.过期策略 常见过期策略 Redis过期策略 1. 定期删除 2. 惰性删除 RDB对过 ...
- Redis(五)Redis内存维护方案(过期策略及淘汰策略)
目录 内存维护解决方案 过期策略 内存淘汰策略 内存维护解决方案 在Redis的配置文件中redis.conf 中memeory managment # maxmemory <bytes> ...
- Redis 过期策略和淘汰策略
1.Redis 过期策略 Redis 过期策略用于处理设置了缓存时间的数据,使用定时扫描和惰性删除机制删除到期的缓存数据. Redis 将设置了过期时间的 key 保存在一个独立的字典中,定时扫描就是 ...
- redis过期策略与淘汰策略
redis过期策略与淘汰策略 1.过期策略 2.淘汰策略 3.在哪里配置? 4.Lazy Free 1.过期策略 1.redis中所有的key都可以通过expire命令来设置过期时间,所有被设置了过期 ...
- redis的过期策略和淘汰策略
过期键删除策略 1.定时删除:在设置键的过期时间的同时,创建一个定时器timer,让定时器在键过期时间来临时,立即执行对键的删除操作. 2.惰性删除:放任键过期不管,但是每次从键空间中获取键时,都检查 ...
- 数据结构(字典,跳跃表)、使用场景(计数器、缓存、查找表、消息队列、会话缓存、分布式锁)、Redis 与 Memcached、 键的过期时间、数据淘汰策略、持久化(RDB、AOF)
1. 数据结构 1.1 字典 dictht 是一个散列表结构,使用拉链法保存哈希冲突的 dictEntry /* This is our hash table structure. Every dic ...
- redis 存储数据不设置过期时间 会自动过期吗_Redis-数据淘汰策略持久化方式(RDB/AOF)Redis与Memcached区别...
Redis与Memcached区别: 两者都是非关系型数据库.主要有以下不同: 数据类型: Memcached仅支持字符串类型. redis支持:String,List,set,zset,hash 可 ...
- redis的删除策略和淘汰策略
删除策略:是当数据到期,redis对过期数据的处理策略. 1.定时删除:当某一个key的过期时间到达后,redis就把对应的value和key删除. 优点是省内存,能快速的把过期数据删除腾出空间. 缺 ...
最新文章
- [转载]AIX 上 Lotus Domino 的内存使用
- struts2+hibernate3+spring3(ssh2)框架下的web应用(1)
- Linux内存 性能调优
- android简单服务器的搭建
- 为什么element的el-backtop会不管用,来看这里!
- 女程序员怀孕7个月坚持上班敲代码
- mysql保存emoji报java.sql.SQLException: Incorrect string value: '\xF0\x9F\x98\x8B'
- linux crontab sleep,linux crontab 执行任务(7秒执行)
- linux crontab 每5分钟执行一次_linux面试题:Linux定时任务必备技能有哪些?
- [转载]转,Oracle中关于处理小数点位数的几个函数,取小数位数,Oracle查询函数...
- android 项目将csv文件写入sqlite数据库 代码,如何将csv文件大容量插入sqlite c#
- 分享2款XSHELL配色方案及导入配色方案的方法
- 蓝桥杯2019年第十届C/C++省赛A组第四题-迷宫
- 怎么下载小程序图片 ?
- Word中插入图片只显示一部分
- 如何配置log4j每天产生日志,并且当天日志大于10M时自动生成另一个文件
- FreeMarker导出word遇到的坑
- Kubernetes(k8s)的Secret以密文的方式存储数据
- 命令启动edge浏览器且全屏
- 移植Linux 3.4.2内核到JZ2440开发板(超精讲)
热门文章
- 【数学建模】数学建模指导:建模常用算法应用场景解析
- echart 世界地图发光_使用echart.js来绘制世界地图
- 杰控连接mysql_杰控FameView软件首秦ERP系统L2级中的应用
- linux系统下载乌班图,乌班图系统下载-乌班图Linux系统下载 V20.04官方版-KK下载站...
- 大数据shipin教程_大数据视频教程百度网盘下载
- 可预见的数字化未来:在雄安再造爱沙尼亚
- 离散数学杜忠复版答案_离散数学第2版答案
- javaScript入门
- 【MFC自绘窗口】 窗口设计第一课
- 2021年游戏项目的十大编程语言:C++、Java、JavaScript、Python均在榜上