Redis缓存的淘汰策略是什么

技术Redis缓存的淘汰策略是什么这篇文章主要讲解了“Redis缓存的淘汰策略是什么”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“Redis缓存的淘汰策略是什么”吧!Re

本文主要讲解“Redis缓存的淘汰策略是什么”,简单明了,易学易懂。请跟随边肖的思路一起学习学习《Redis缓存的淘汰策略是什么》。

Redis缓存的淘汰策略是什么

Redis(Remote Dictionary Server)是用ANSI C语言编写的开源日志型、键值型数据库,支持网络,可基于内存,可持久化,提供多种语言的API。【相关推荐:Redis视频教程】

它具有以下特点:

基于内存运行,性能高。

支持分布式,理论上无限扩展。

键值存储结构,高效查询。

提供多种开发语言API,易于与现有业务系统集成。

通常在业务系统中用作分布式缓存、集中式Session存储、分布式锁等应用场景。

无论是本地缓存还是分布式缓存,为了保证高性能,内存都是用来保存数据的。由于成本和内存的限制,当存储的数据超过缓存容量时,需要拒绝缓存的数据。一般剔除策略包括先进先出剔除最早的数据,LRU剔除最近最少使用的数据,LFU剔除最近最少使用的数据。

00-1010在生产环境中,我们不允许redis有互换行为。因此,最大使用内存通常是有限的,redis提供配置参数maxmemory来指定最大使用内存。

以下配置是合法的:

最大内存1000KB

最大内存100兆字节

最大内存1GB

Max0 #表示没有限制,一般不使用redis.conf配置文件,如下所示。

Redis缓存的淘汰策略是什么

Redis 缓存淘汰策略触发

volatile-在LRU设置的超时数据中,删除最不常用的数据;

Allkeys-lru查询所有键中最不常用的数据进行删除,这是使用最广泛的策略。

Volatile-random是从已设置超时的数据中随机删除的;

all keys随机查询所有密钥并随机删除;

Volatile-ttl查询所有设置超时的数据,追赶后立即排序,删除即将过期的数据;

无引用(默认)如果设置为该属性,则不会删除;如果内存溢出,它将报告错误并返回;

Volatile-lfu从所有配置了过期时间的按键中驱逐频率最低的按键;

Allkeys-lfu从所有按键中排除频率最低的按键;

8 种 Redis 缓存策略

LRU 算法

isrru算法不是一个精确的实现。这意味着Redis无法选择最佳的驱逐候选人,即过去访问次数最多的人。相反,它试图通过对少量密钥进行采样来运行LRU算法的近似,然后驱逐采样密钥中的最佳密钥(具有最早的访问时间)。

但是从Redis 3.0开始,算法进行了改进,可以选择一些好的候选人进行驱逐。这提高了算法的性能,并使其更接近真实LRU算法的行为。

REDLRU算法的要点是,您可以通过更改可以.的样本号来调整算法的精度来检查每次驱逐。该参数由以下配置指令控制:

maxmemory-samples5Redis没有被真正的LRU实现的原因是它需要更多的内存。然而,对于使用Redis的应用程序,近似实际上是等价的。下面是Redis和皇家LRU使用的LRU近似的对比图。

/88/145926.jpg" alt="Redis缓存的淘汰策略是什么">

生成上述图表的测试使用给定数量的键填充了 Redis 服务器。从第一个到最后一个访问密钥,因此第一个密钥是使用 LRU 算法驱逐的最佳候选者。后来又添加了 50% 的密钥,以强制驱逐一半的旧密钥。

您可以在图中看到三种点,形成三个不同的带。

  • 浅灰色带是被驱逐的对象。

  • 灰色带是未被驱逐的对象。

  • 绿色带是添加的对象。

在理论上的 LRU 实现中,我们预计在旧密钥中,前半部分将过期。Redis LRU 算法只会在概率上使旧密钥过期。

LRU 只是一个模型,用于预测给定密钥在未来被访问的可能性。此外,如果您的数据访问模式非常类似于幂律,则大多数访问将位于 LRU 近似算法能够很好处理的键集中。

缺点:可能会存在一定时间内大量的冷数数据被访问产生大量的热点数据

LFU 算法

从 Redis 4.0 开始,可以使用新的最不常用驱逐模式。这种模式在某些情况下可能会更好(提供更好的命中率/未命中率),因为使用 LFU Redis 会尝试跟踪项目的访问频率,因此很少使用的项目会被驱逐,而经常使用的项目有更高的机会留在记忆中。

如果您认为在 LRU,最近访问过但实际上几乎从未被请求过的项目不会过期,因此风险是驱逐将来有更高机会被请求的密钥。LFU 没有这个问题,一般应该更好地适应不同的访问模式。

配置LFU模式,可以使用以下策略:

  • volatile-lfu 在具有过期集的键中使用近似 LFU 驱逐。

  • allkeys-lfu 使用近似 LFU 驱逐任何密钥。

LFU 类似于 LRU:它使用一个概率计数器,称为莫里斯计数器,以便仅使用每个对象的几位来估计对象访问频率,并结合衰减周期,以便计数器随着时间的推移而减少:在某些时候,我们不再希望将密钥视为经常访问的密钥,即使它们过去是这样,以便算法可以适应访问模式的转变。

这些信息的采样与 LRU 发生的情况类似(如本文档的前一部分所述),以便选择驱逐的候选人。

然而,与 LRU 不同的是,LFU 具有某些可调参数:例如,如果不再访问频繁项,它的排名应该以多快的速度降低?还可以调整 Morris 计数器范围,以便更好地使算法适应特定用例。

默认情况下,Redis 4.0 配置为:

  • 在大约一百万个请求时使计数器饱和。

  • 每一分钟衰减一次计数器。

这些应该是合理的值并经过实验测试,但用户可能希望使用这些配置设置以选择最佳值。

有关如何调整这些参数的说明可以redis.conf在源代码分发的示例文件中找到,但简单地说,它们是:

lfu-log-factor 10 
lfu-decay-time 1

衰减时间是显而易见的,它是计数器应该衰减的分钟数,当采样并发现它比该值更旧时。一个特殊值0意味着:每次扫描时总是衰减计数器,很少有用。

计数器对数因子会改变需要多少次命中才能使频率计数器饱和,这恰好在 0-255 的范围内。系数越高,需要越多的访问以达到最大值。根据下表,系数越低,低访问计数器的分辨率越好:

+--------+------------+------------+------------+------------+------------+
| factor | 100 hits   | 1000 hits  | 100K hits  | 1M hits    | 10M hits   |
+--------+------------+------------+------------+------------+------------+
| 0      | 104        | 255        | 255        | 255        | 255        |
+--------+------------+------------+------------+------------+------------+
| 1      | 18         | 49         | 255        | 255        | 255        |
+--------+------------+------------+------------+------------+------------+
| 10     | 10         | 18         | 142        | 255        | 255        |
+--------+------------+------------+------------+------------+------------+
| 100    | 8          | 11         | 49         | 143        | 255        |
+--------+------------+------------+------------+------------+------------+

淘汰最近一段时间被访问次数最少的数据,以次数作为参考。

缺点:

1. 最近加入的数据常常容易被剔除,因为其起始方法次数比较少,

2. 如果频率时间度量为 1 个小时,则平均一天每个小时内访问频率 1000 的热点数据可能会被 2个小时的一段时间访问的频率为 1001 的数据剔除掉。可能会出现一些临界值的数据。

缓存策略设置建议

建议:了解Redis 的淘汰策略之后,在平时使用尽量主动设置/更新 key 的 expire 时间主动剔除不活跃的旧数据, 有助于提升查询性能

感谢各位的阅读,以上就是“Redis缓存的淘汰策略是什么”的内容了,经过本文的学习后,相信大家对Redis缓存的淘汰策略是什么这一问题有了更深刻的体会,具体使用情况还需要大家实践验证。这里是,小编将为大家推送更多相关知识点的文章,欢迎关注!

内容来源网络,如有侵权,联系删除,本文地址:https://www.230890.com/zhan/51782.html

(0)

相关推荐

  • Canal Instance 设计理念与定制开发思路是什么

    技术Canal Instance 设计理念与定制开发思路是什么这篇文章将为大家详细讲解有关Canal Instance 设计理念与定制开发思路是什么,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后

    攻略 2021年10月21日
  • SpringBoot整合Redisson如何实现分布式锁

    技术SpringBoot整合Redisson如何实现分布式锁这篇文章将为大家详细讲解有关SpringBoot整合Redisson如何实现分布式锁,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所

    攻略 2021年11月13日
  • 消息队列架构设计思路(消息队列框架有哪些)

    技术消息队列Broker主从架构的设计方案是什么这篇文章将为大家详细讲解有关消息队列Broker主从架构的设计方案是什么,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。今天

    2021年12月24日
  • 绩点换算,5分制绩点怎么换算成百分制

    技术绩点换算,5分制绩点怎么换算成百分制您好绩点换算,澳大利亚留学研究生申请条件:国内211大学,大学平均成绩75分以上;非211大学,平均成绩80分以上;目前八大里的西澳大学,阿德莱德大学都是算加权平均分,不算马哲或者

    生活 2021年10月23日
  • 为什么看不到微信好友的朋友圈,为什么看不到微信好友的朋友圈

    技术为什么看不到微信好友的朋友圈,为什么看不到微信好友的朋友圈微信看不到对方的朋友圈估计是对方设置了权限为什么看不到微信好友的朋友圈,不允许你看她/他的朋友圈。或者是对方没有发过朋友圈,朋友圈里无内容。设置朋友圈查看权限

    生活 2021年10月27日
  • 分析Oracle表数据库高水位及shrink操作

    技术分析Oracle表数据库高水位及shrink操作这篇文章主要介绍“分析Oracle表数据库高水位及shrink操作”,在日常操作中,相信很多人在分析Oracle表数据库高水位及shrink操作问题上存在疑惑,小编查阅

    攻略 2021年11月5日