当前位置:网站首页>Redis之过期策略、内存淘汰机制、LRU
Redis之过期策略、内存淘汰机制、LRU
2022-08-08 21:09:00 【~庞贝】
Redis之过期策略、内存淘汰机制、LRU
1.Redis的过期策略
Redis的过期策略,是有定期删除+惰性删除两种。
定期好理解,默认100s就随机抽一些设置了过期时间的key,去检查是否过期,过期了就删了。
惰性删除,见名知意,惰性嘛,我不主动删,我懒,我等你来查询了我看看你过期没,过期就删了还不给你返回,没过期该怎么样就怎么样。
对于定期删除来说,为啥不扫描全部设置了过期时间的key呢?
假如Redis里面所有的key都有过期时间,都扫描一遍?那太恐怖了,而且我们线上基本上也都是会设置一定的过期时间的。全扫描跟你去查数据库不带where条件不走索引全表扫描一样,100s一次,Redis累都累死了。
对于定期删除来说,如果一直没随机到很多key,里面不就存在大量的无效key了?或者对于惰性删除来说我也没查询,该如何?
应用到了内存淘汰机制
2.内存淘汰机制
官网上给到的内存淘汰机制是以下几个:
1)noeviction:返回错误当内存限制达到并且客户端尝试执行会让更多内存被使用的命令(大部分的写入指令,但DEL和几个例外)
2)allkeys-lru: 尝试回收最少使用的键(LRU),使得新添加的数据有空间存放。
3)volatile-lru: 尝试回收最少使用的键(LRU),但仅限于在过期集合的键,使得新添加的数据有空间存放。
4)allkeys-random: 回收随机的键使得新添加的数据有空间存放。
5)volatile-random: 回收随机的键使得新添加的数据有空间存放,但仅限于在过期集合的键。
6)volatile-ttl: 回收在过期集合的键,并且优先回收存活时间(TTL)较短的键,使得新添加的数据有空间存放。
注:如果没有键满足回收的前提条件的话,策略volatile-lru, volatile-random以及volatile-ttl就和noeviction 差不多了。
3.LRU
至于LRU我也简单提一下,手写实在是太长了,大家可以去Redis官网看看,我把近视LUR效果给大家看看:
tip:Redis为什么不使用真实的LRU实现是因为这需要太多的内存。不过近似的LRU算法对于应用而言应该是等价的。使用真实的LRU算法与近似的算法可以通过下面的图像对比。
你可以看到三种点在图片中, 形成了三种带.
浅灰色带是已经被回收的对象。
灰色带是没有被回收的对象。
绿色带是被添加的对象。
在LRU实现的理论中,我们希望的是,在旧键中的第一半将会过期。Redis的LRU算法则是概率的过期旧的键。
你可以看到,在都是五个采样的时候Redis 3.0比Redis 2.8要好,Redis2.8中在最后一次访问之间的大多数的对象依然保留着。使用10个采样大小的Redis 3.0的近似值已经非常接近理论的性能。
注意LRU只是个预测键将如何被访问的模型。另外,如果你的数据访问模式非常接近幂定律,大部分的访问将集中在一个键的集合中,LRU的近似算法将处理得很好。
其实在大家熟悉JAVA中的LinkedHashMap中也实现了Lru算法的,实现如下:
当容量超过100时,开始执行LRU策略:将最近最少未使用的 TimeoutInfoHolder 对象 evict 掉。
真实面试中会让你写LUR算法,你可别搞原始的那个,写不完的,你要么怼上面这个,要么怼下面这个,找一个数据结构实现下Java版本的LRU还是比较容易的,知道啥原理就好了。
边栏推荐
猜你喜欢
Everything原理探究以及C#实现
【highcharts应用-双饼图】
IDEA Error:(1, 1) 错误: 非法字符: \65279 Error:(1, 10) 错误: 需要class, interface或enum 解决办法
图神经网络GNN简介及应用方向
单片机——DHT11 温湿度传感器
安全策略及电商购物订单简单用例
神经网络论文Enhancing deep neural networks via multiple kernel learning
安装sentry
Getting Started with GeoServer: 04-Publishing Shapfile Map Data
数组的push()、pop()、shift()和unshift()方法讲解
随机推荐
GeoServer入门学习:06-发布多层级TIF地图大图数据
oracle数据库的数据备份导出与数据导入恢复
小程序——切割字符串
分别用BeautifulSoup和scrapy爬取某一城市天气预报
[Method for converting timestamp to normal time format]
【Export PDF-Project Application】
文档图像二值化DIB_database
【线性代数04】投影矩阵P和标准正交矩阵Q
day7——CORS跨域问题
文档图像二值化DIB_paper_2(更新中...)
语义分割FCN FPN UNet DeepLab HRNet SETR TransFuse...
leetcode 217存在重复元素
[MEF]第05篇 MEF的目录(Catalog)筛选
Under the Windows socket (TCP) console program
Jenkins下载安装
[MEF] Chapter 04 MEF's Multi-Component Import (ImportMany) and Directory Services
js写一个搜索添加记录,点击记录删除内容
单片机--IIC总线篇
2 Scrapy
两个行间块状div之间的间隙消除