栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

Redis概述,过期策略,内存淘汰机制

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

Redis概述,过期策略,内存淘汰机制

非关系型数据库NoSQL

存储结构是Key-Value

直接存在内存里面,所以读写速度非常快,被用于缓存技术(有些数据更新频率低即不怎么变动,读取频率高,就可以将其存在缓存里面)

你要考虑一个问题,在某个特定业务场景下,你是用redis作为数据库,还是mysql作为数据库呢?

缓存情形下肯定用redis

1.Redis 过期策略

使用 定期删除 + 懒惰删除 删除过期的 Key

(1)定时删除:对key-value设置一个过期时间,过期时间到达立即删除这个键值对

由于删除需要占用cpu,所以会影响速度,所以这就是用时间换空间

(2)懒惰删除:键值对到达过期时间,不删除,不做任何处理

等到下次访问该数据时,如果没有过期就返回数据,过期了就删除,返回不存在

要用的时候才检查这个键值对是否过期

这就会发现内存里会存很多的数据,但不需要cpu去定期清理,所以速度很快,拿空间换时间

显然,这两种方法都太极端了,折中方案就是定期删除

每隔一段时间,对一些key进行检查,删掉这些key里面的过期的

2.Redis内存淘汰机制

一般来说,缓存的容量是小于数据总量的,所以,当缓存数据越来越多,Redis 不可避免的会被写满,这时候就涉及到 Redis 的内存淘汰机制了。我们需要选定某种策略将“不重要”的数据从 Redis 中清除,为新的数据腾出空间。

根据二八原理:80% 的请求访问了 20% 的数据,将Redis缓存设置为数据总量的20%,(一般将缓存容量设置为总数据量的15%-30%)

Redis4.0版本之前有6种策略,4.0增加了2种(主要增加了LFU算法,allkeys-lfu和volatile-lfu)

8种淘汰策略:

(1)noevition,也就是不淘汰,不会对缓存的数据进行淘汰,当内存不够了就会报错

以allkeys开头的策略是针对所有数据的:一旦数据被选中了,即使过期时间没到,也会被删除,

如果过期时间到了,但是没有被策略选中,同样会被删除

(2)allkeys-random:随机删除

(3)allkeys-lru:使用 LRU 算法进行筛选删除

(4)allkeys-lfu:使用 LFU 算法进行筛选删除

针对设置了过期时间的数据,即使缓存没有被写满,数据过期也会被删除

(5)volatile-random:随机删除

(6)volatile-ttl:根据过期时间先后进行删除,越早过期的越先被删除

(7)volatile-lru:使用 LRU 算法进行筛选删除

(8)volatile-lfu:使用 LFU 算法进行筛选删除

LRU算法:Least Recently Used,即最近最少使用,将最近最不常用的数据选出来,保留那些最近频繁使用的数据,LRU 会把所有数据组成一个链表,链表头部称为 MRU,代表最近最常使用的数据;尾部称为 LRU代表最近最不常使用的数据( 即队头是常用数据,队尾是不常用数据)

举个例子,链表长度固定为4:

现在我们访问了3,于是将3这个节点拿到队头

现在又访问了2这个节点,将它拿到队头:

 最后写入5,由于链表长度固定为4,所以需要移除一个节点,把队尾最不常用的4移除掉

由于如果真的用链表管理所有缓存的数据,这会给 Redis 带来额外的巨大开销,而且,当有数据访问时就会有链表移动操作,会大大降低 Redis 的性能。于是,Redis 对 LRU 的实现进行了一些改变(称之为近似的LRU算法):

记录每个 key 最近一次被访问的时间戳(用一个lru字段来记录),维护一个固定容量的集合

(1)先随机选择 N 个数据作为一个候选集合

(2)继续挑选数据进入集合,进入集合的条件是:它的 lru 大于候选集合中最小的 lru,到达最大容量之后,将 lru 值小的数据淘汰出去。(lru值越小,说明最近一次被访问的越早)

LFU算法

Least Frequently Used,即最不经常使用策略,它是基于数据访问次数来淘汰数据的(LRU是基于最后一次访问的时间来淘汰数据的)

为每个数据增加了一个计数器,来统计这个数据的访问次数。

把访问次数最低的数据淘汰,如果访问次数相同,再根据访问的时间,将访问时间戳最小的淘汰。

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/924265.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号