redis淘汰策略

XiaoMaPro XiaoMaPro     2022-12-05     453

关键词:

Redis淘汰策略

Redis的内存回收主要围绕Redis过期策略、Redis淘汰策略

策略名称策略说明
Redis过期策略删除过期时间的key值
Redis淘汰策略内存使用到达maxmemory上限时触发内存淘汰数据

Redis过期策略通常有以下三种:

定时过期

为每个设置过期时间的,到过期时间就会立即清除。该策略可以立即清除过期的数据,不管服务器现在的运行状况,都会立马执行,这样会占用大量的CPU资源去处理过期的数据,影响缓存的响应时间和吞吐量。

惰性过期

只有当访问一个key时,才会判断该key是否已过期,过期则清除。该策略可以最大化地节省CPU资源,却对内存非常不友好。极端情况可能出现大量的过期key没有再次被访问,从而不会被清除,占用大量内存。

定期过期

每隔一定的时间,会扫描一定数量的数据库的expires字典中一定数量的key,并清除其中已过期的key。该策略是前两者的一个折中方案。通过调整定时扫描的时间间隔和每次扫描的限定耗时,可以在不同情况下使得CPU和内存资源达到最优的平衡效果。

Redis中同时使用了惰性过期和定期过期两种过期策略。


Redis淘汰策略

Redis的内存淘汰策略,是指当内存使用达到maxmemory极限时,需要使用LAU淘汰算法来决定清理掉哪些数据,以保证新数据的存入。

LRU算法

Redis默认情况下就是使用LRU策略算法。
LRU算法(least RecentlyUsed),最近最少使用算法,也就是说默认删除最近最少使用的键。
redis中并不会准确的删除所有键中最近最少使用的键,而是随机抽取3个键,删除这三个键中最近最少使用的键。配置文件中的maxmeory-samples 3 。如果设置为10,那么效果会更好,不过也会耗费更多的CPU资源。

缓存清理配置

maxmemory用来设置redis存放数据的最大的内存大小,一旦超出这个内存大小之后,就会立即使用LRU算法清理掉部分数据。
对于64 bit的机器,如果maxmemory设置为0,那么就默认不限制内存的使用,直到耗尽机器中所有的内存为止;,但是对于32 bit的机器,有一个隐式的闲置就是3GB

Redis数据淘汰策略

maxmemory-policy,可以设置内存达到最大闲置后,采取什么策略来处理。

规则名称规则说明
noeviction当内存不足以容纳新写入数据时,新写入操作会报错。
allkeys-lru当内存不足以容纳新写入数据时,在键空间中,移除最近最少使用的key。
allkeys-random当内存不足以容纳新写入数据时,在键空间中,随机移除某个key。
volatile-lru当内存不足以容纳新写入数据时,在设置了过期时间的键空间中,移除最近最少使用的key。(默认值)
volatile-random当内存不足以容纳新写入数据时,在设置了过期时间的键空间中,随机移除某个key。
volatile-ttl当内存不足以容纳新写入数据时,在设置了过期时间的键空间中,有更早过期时间的key优先移除。
缓存清理的流程

客户端执行数据写入操作redis server接收到写入操作之后,检查maxmemory的限制,如果超过了限制,根据对应的policy清理掉部分数据否则执行写入操作完成后执行。

redis面试题:持久化文件与淘汰策略

原文地址:Redis面试题(三):持久化文件与淘汰策略原文地址:Redis面试题(三):持久化文件与淘汰策略原文地址:Redis面试题(三):持久化文件与淘汰策略原文地址:Redis面试题(三):持久化文件与淘汰策略欢迎关注我的公众号【... 查看详情

redis哨兵模式+过期策略淘汰策略读写策略

最近总结的一些思维导图,记录一下! 查看详情

redis哨兵模式+过期策略淘汰策略读写策略

最近总结的一些思维导图,记录一下! 查看详情

redis哨兵模式+过期策略淘汰策略读写策略

最近总结的一些思维导图,记录一下! 查看详情

redis提供6种数据淘汰策略(代码片段)

淘汰策略的原因在redis中,允许用户设置最大使用内存大小server.maxmemory,在内存限定的情况下是很有用的。譬如,在一台8G机子上部署了4个redis服务点,每一个服务点分配1.5G的内存大小,减少内存紧张的情况,由此获取更为稳健... 查看详情

redis的回收策略(淘汰策略)是什么?

...集(server.db[i].expires)中挑选最近最少使用的数据淘汰volatile-ttl:从已设置过期时间的数据集(server.db[i].expires)中挑选将要过期的数据淘汰volatile-random:从已设置过期时间的数据集&#x 查看详情

redis源码六-redis中的缓存淘汰策略处理分析(代码片段)

...s的过期策略。这次我来探究一下。我们都知道redis的缓存淘汰策略有以下几种:noeviction无过期策略,内存满了就直接异常volatile-lru对有过期时间的key进行lru淘汰(越长时间没有被访问,越容易被淘汰)allkeys-lru对全... 查看详情

redis的内存淘汰策略(代码片段)

简单介绍了Redis的内存淘汰策略。Redis的maxmemory参数用于指定Redis能使用的最大内存,既可以在redis.conf配置文件中设置(单位Byte),也可以在运行过程中通过CONFIGSET命令动态修改。将maxmemory设置为0,或者没有... 查看详情

redis过期删除策略和内存淘汰策略

...如果内存空间用满,就会自动驱逐老的数据。Redis中有6种淘汰策略:redis.conf文件中配置策略,有2个地方: 查看详情

redis淘汰策略与过期策略及其应用场景

文章目录Redis的淘汰策略Redis的过期策略那么我们应如何合理的设置过期时间缓存穿透、缓存击穿、缓存雪崩有什么区别,该如何解决?缓存穿透:问题描述:解决方案:缓存击穿:问题描述:解决方案... 查看详情

redis淘汰策略与过期策略及其应用场景

文章目录Redis的淘汰策略Redis的过期策略那么我们应如何合理的设置过期时间缓存穿透、缓存击穿、缓存雪崩有什么区别,该如何解决?缓存穿透:问题描述:解决方案:缓存击穿:问题描述:解决方案... 查看详情

redis过期策略和内存淘汰机制(代码片段)

...除为什么要采用定期删除+惰性删除2种策略呢?redis内存淘汰机制常见的删除策略1.定时删除:在设置键的过期时间的同时,创建一个timer,让定时器在键的过期时间到达时,立即执行对键的删除操作。(主动删除)对内存友好,... 查看详情

缓存数据库redis之三:内存淘汰策略及优化(代码片段)

目录一、Redis的内存淘汰策略  1.1.概念  1.2.策略一:全局的键空间选择性移除  1.3.策略二:设置过期时间的键空间选择性移除  1.4.LRU、LFU和volatile-ttl都是近似随机算法 1.4.1.LRU算法 1.4.2.LFU算法1.5.过期删除策略1.6.AOF... 查看详情

缓存数据库redis之三:内存淘汰策略及优化(代码片段)

目录一、Redis的内存淘汰策略  1.1.概念  1.2.策略一:全局的键空间选择性移除  1.3.策略二:设置过期时间的键空间选择性移除  1.4.LRU、LFU和volatile-ttl都是近似随机算法 1.4.1.LRU算法 1.4.2.LFU算法1.5.过期删除策略1.6.AOF... 查看详情

redis中的lru淘汰策略分析(代码片段)

...删除里面的过期键。另外,Redis也可以开启LRU功能来自动淘汰一些键值对。LRU算法当需要从缓存中淘汰数据时,我们希 查看详情

redis配置过期自动删除策略

...生效的配置为noeviction,需要根据不同的业务选择不同的淘汰策略volatile-lru:在设置过期时间的数据集合里淘汰最近访问最少的数据allkeys-lru:所有数据集合中淘汰最近访问最少的数据volatile-lfu:在设置过期时间的数据集合里淘汰... 查看详情

redis前传自己手写一个lru策略|redis淘汰策略(代码片段)

一、题目描述146.LRU缓存机制运用你所掌握的数据结构,设计和实现一个LRU(最近最少使用)缓存机制。实现LRUCache类:LRUCache(intcapacity)以正整数作为容量capacity初始化LRU缓存intget(intkey)如果关键字key存在于缓存中,则返回... 查看详情

redis前传自己手写一个lru策略|redis淘汰策略(代码片段)

一、题目描述146.LRU缓存机制运用你所掌握的数据结构,设计和实现一个LRU(最近最少使用)缓存机制。实现LRUCache类:LRUCache(intcapacity)以正整数作为容量capacity初始化LRU缓存intget(intkey)如果关键字key存在于缓存中,则返回... 查看详情