Redis过期策略和淘汰策略
1 过期删除策略
1.1 定时删除
当对一个key设置了过期时间,当该时间到,立即执行对该key的删除。
优点:定时删除对内存最友好,保证key一旦过期就能立即从内存中删除。
缺点:对CPU最不友好,在过期键比较多的时候,删除过期键会占用一部分CPU时间,对服务器的响应时间和吞吐量造成影响。
1.2 惰性删除
当一个key被设置过期时间后,当key的过期时间到了,并不会立即从内存中删除;在我们使用该key时,先检查其是否过期,过期则将其从内存中删除。
优点:对CPU友好、只在使用的时候才会进行过期检查,对于没用到的key不会浪费时间进行过期检查。
缺点:对内存不好用,key过期了,却一直没被使用,就会一直占这内存。如果数据库中存在很多过期键不被使用,便永远不会被被删除,内存不会被释放,从而造成内存泄漏。
1.3 定期删除
每隔一段时间(该时间段可设置),随机抽取一些设置了过期时间的key进行检查,删除里面过期的键。
在Redis的配置文件redis.conf中有一个属性"hz",默认为10,表示1s执行10次定期删除,即每隔100ms执行一次,可以修改这个配置值。
随机抽取,抽取多少?
同样是由redis.conf文件中的maxmemory-samples属性决定的,默认为5。
优点:可以通过限制删除操作执行的时长和频率来减少删除操作对 CPU 的影响。另外定期删除,也能有效释放过期键占用的内存。
缺点:难以确定删除操作执行的时长和频率。
如果执行的太频繁,定期删除策略变得和定时删除策略一样,对CPU不友好。
如果执行的频率小,就和惰性删除一样了,过期键占用的内存不会及时得到释放。
另外最重要的是,在获取某个键时,如果某个键的过期时间已经到了,但是还没执行定期删除,那么就会返回这个键的值,这是业务不能忍受的错误。
2 Redis过期删除策略
redis过期删除策略:惰性删除和定期删除。
3 内存淘汰策略
内存淘汰机制能保证在redis内存占用过高的时候,去进行内存淘汰,也就是删除一部分key,保证redis的内存占用率不会过高,那么它会淘汰哪些key呢?Redis目前共提供了8种内存淘汰策略,含Redis 4.0版本之后又新增的两种LFU模式:volatile-lfu和allkeys-lfu。
LRU:最近最久未使用
LFU:最近最少使用
no-eviction | 当内存不足以容纳新写入数据时,新写入操作会报错,无法写入新数据,一般不采用。 |
allkeys-lru | 当内存不足以容纳新写入数据时,移除最近最少使用的key,这个是最常用的 |
allkeys-random | 当内存不足以容纳新写入的数据时,随机移除key |
allkeys-lfu | 当内存不足以容纳新写入数据时,移除最不经常(最少)使用的key |
volatile-lru | 当内存不足以容纳新写入数据时,在设置了过期时间的key中,移除最近最少使用的key |
volatile-random | 内存不足以容纳新写入数据时,在设置了过期时间的key中,随机移除某个key |
volatile-lfu | 当内存不足以容纳新写入数据时,在设置了过期时间的key中,移除最不经常(最少)使用的key |
volatile-ttl | 当内存不足以容纳新写入数据时,在设置了过期时间的key中,优先移除过期时间最早(剩余存活时间最短)的key |
※ 什么时候会执行内存淘汰策略,内存占用率过高的标准是什么?
redis.conf配置文件中的 maxmemory 属性限定了 Redis 最大内存使用量,当占用内存大于maxmemory的配置值时会执行内存淘汰策略。
※ 内存淘汰策略的配置
内存淘汰机制由redis.conf配置文件中的maxmemory-policy属性设置,没有配置时默认为no-eviction模式。
※ 淘汰策略的执行过程
> 客户端执行一条命令,导致Redis需要增加数据(比如set key value);
> Redis会检查内存使用情况,如果内存使用超过 maxmemory,就会按照配置的置换策略maxmemory-policy删除一些key;
> 再执行新的数据的set操作;
Redis过期策略和淘汰策略相关推荐
- 高性能分布式缓存redis(持久化原理 安全策略 过期删除内存淘汰策略 性能压测 高可用 Redis Cluster)
redis redis(持久化原理 安全策略 过期删除&内存淘汰策略 性能压测 高可用 Redis Cluster) 1. 持久化原理 1.1 持久化流程(落盘) 1.2 RDB详解 1.2. ...
- Redis(五)Redis内存维护方案(过期策略及淘汰策略)
目录 内存维护解决方案 过期策略 内存淘汰策略 内存维护解决方案 在Redis的配置文件中redis.conf 中memeory managment # maxmemory <bytes> ...
- redis过期策略与淘汰策略
redis过期策略与淘汰策略 1.过期策略 2.淘汰策略 3.在哪里配置? 4.Lazy Free 1.过期策略 1.redis中所有的key都可以通过expire命令来设置过期时间,所有被设置了过期 ...
- Redis-设置过期时间及淘汰策略
文章目录 1. TTL 2. 设置过期时间 3. 删除过期key 4. 淘汰策略 Redis-设置过期时间及淘汰策略 项目组使用的 Redis 服务器发出了内存不足报警,查了一些资料,记录下. 1. ...
- Reds 过期策略 内存淘汰策略 持久化策略
过期策略 定期删除 redis 会将每个设置了过期时间的 key 放入到一个独立的字典中,以后会定期遍历这个字典来删除到期的 key. 定期删除策略 Redis 默认会每秒进行十次过期扫描(100ms ...
- Redis 过期 key 清理删除策略汇总
Redis 底层使用了三种策略来清理过期的key 一.被动清理 触发条件:读/写一个已经过期的key 当读写一个key时,Redis首先检查key是否存在,若存在且已经过期,则删除key的同时返回ni ...
- redis的过期策略和淘汰策略
过期键删除策略 1.定时删除:在设置键的过期时间的同时,创建一个定时器timer,让定时器在键过期时间来临时,立即执行对键的删除操作. 2.惰性删除:放任键过期不管,但是每次从键空间中获取键时,都检查 ...
- Redis的持久化机制、过期策略、淘汰策略
文章目录 一.持久化机制 1. RDB机制 2. AOF机制 RDB的优缺点 AOF的优缺点 持久化机制选择 二.过期策略 常见过期策略 Redis过期策略 1. 定期删除 2. 惰性删除 RDB对过 ...
- Redis 过期策略和淘汰策略
1.Redis 过期策略 Redis 过期策略用于处理设置了缓存时间的数据,使用定时扫描和惰性删除机制删除到期的缓存数据. Redis 将设置了过期时间的 key 保存在一个独立的字典中,定时扫描就是 ...
- Redis之key的淘汰策略
Redis中有一些Key到期了,需要一些策略来处理这些过期的key, 设置到期时间的key会放入一个单独的字典中,以后会定时遍历这个这个字典来删除到期的key,除了定时遍历以外,还会使用惰性策略来删除 ...
最新文章
- python数字类型-Python数字类型介绍
- 项目代码从GitHub上克隆到本地
- 云炬金融每日一题20211008
- js一个典型的对象写法,推荐使用这种格式,用于处理图像的基本方法、
- 初识Mysql(part18)--我需要知道的4个关于联结的小知识点
- 从零开始学android开发-布局中 layout_gravity、gravity、orientation、layout_weight
- 微博拟全球发售1100万股 发售价不超388港元
- U 盘无法拷贝大于 4GB 文件的解决方法
- 《刀塔传奇》付费设计分析
- 简历编写技巧-java开发工程师简历实战
- CoreData数据库版本迁移
- [导入]agtweener.zip(673.46 KB)
- 357.计算各个位数不同的数字个数
- Matlab 2021b安装
- 【数字钟】数字电路设计 24 小时数字钟(带加速、暂停、滴答声、清零功能)
- Unity : Timeout while trying to pause the Unity Engine.应用闪退问题修复
- uniapp 动态设置导航栏标题 副标题 背景图片 web-view
- Python处理中文路径
- 微信分销商城如何推广比较吸引粉丝
- element组件树形控件el-tree点击展开节点,节点重影