国外做油画的网站,福州建设发展集团有限公司网站,数据表和网站建设的关系,wordpress阿里百秀4.1目录 Redis过期清理策略Redis内存淘汰机制 Redis过期清理策略
Redis 通过设置键的过期时间来实现自动删除过期键。当键的过期时间到达时#xff0c;Redis 会自动将该键删除。Redis 过期清理策略主要有以下两种#xff1a; 惰性删除#xff1a;Redis 在获取键时会检查键是否… 目录 Redis过期清理策略Redis内存淘汰机制 Redis过期清理策略
Redis 通过设置键的过期时间来实现自动删除过期键。当键的过期时间到达时Redis 会自动将该键删除。Redis 过期清理策略主要有以下两种 惰性删除Redis 在获取键时会检查键是否过期如果过期则删除。惰性删除可以确保了过期键不会被返回给客户端但是可能导致内存占用较高因为不会主动回收过期键的内存空间。在惰性删除策略下如果过期键一直没有被访问那么它将永远不会被删除。所以Redis还有下面一种清理策略 定期删除当一个key设置了过期时间之后Redis会将这个key放入一个过期字典中并设置对应的过期时间。然后Redis会启动一个定时器定时检查过期字典是否有过期的key。如果有Redis会将这个key从数据中删除。这种策略可以保证内存被尽快释放但在CPU时间紧张的情况下可能需要花时间去删除这些key
Redis 定时扫描策略
Redis 默认会每秒进行十次过期扫描过期扫描不会遍历过期字典中所有的 key而是 采用了一种简单的贪心策略。
从过期字典中随机 20 个 key删除这 20 个 key 中已经过期的 key如果过期的 key 比率超过 1/4那就重复步骤 1
同时为了保证过期扫描不会出现循环过度导致线程卡死现象算法还增加了扫描时 间的上限默认不会超过 25ms。
Redis内存淘汰机制
当已用内存超过maxmemory限定时Redis会触发内存淘汰机制。内存淘汰机制包括对设置了过期时间的key进行处理的几种方式如volatile-ttl根据过期时间的先后进行删除越早过期的越先被删除、volatile-random随机删除设置了过期时间的键值对等。
maxmemory配置指定了Redis可以使用的内存你可以在redis.conf文件进行设置
例如要配置100兆的内存限制可以在redis.conf文件中添加以下指令:
maxmemory 100 mb以下是Redis的内存淘汰机制的几种策略
noeviction这是默认策略当内存不足以容纳新写入数据时新写入操作会报错无法写入新数据。allkeys-random在所有键中随机选择并删除数据。volatile-random在设置了过期时间的键中随机选择并删除数据。volatile-ttl在设置了过期时间的键中优先删除剩余生存时间最短的键值对。allkeys-lru在所有键中删除最近最少使用的键。volatile-lru在设置了过期时间的键中删除最近最少使用的键。allkeys-lfu在所有键中删除最不经常使用访问次数最少的键。volatile-lfu在设置了过期时间的键中删除最不经常使用访问次数最少的键。
注LFULeast Frequently Used策略是在Redis 4.0版本开始加入的
内存淘汰策略设置
内存淘汰策略可以通过maxmemory-policy参数进行设置
我们可以打开 Redis 配置文件 redis.conf在配置文件中找到 maxmemory-policy 参数根据你的需求选择一个合适的策略并将其设置为对应的值。
例如如果要使用 LFU 策略可以将 maxmemory-policy 设置为 volatile-lfu 或 allkeys-lfu。
如果我们使用的是lru或者lfu策略那么还有一个参数需要我们了解那就是maxmemory-samples 参数
maxmemory-samples 参数用于设置 Redis 在执行 LFULeast Frequently Used和 LRULeast Recently Used淘汰策略时所使用的样本数目。
LFU 和 LRU 策略都需要通过近期访问记录来判断键的热度。为了减少计算开销Redis 会对一部分键进行采样然后根据这些样本来估计键的访问频率或访问时间。maxmemory-samples 参数指定了采样的样本数目。
较小的样本数目可以减少采样的计算开销但可能导致对键的访问频率或访问时间估计不准确。而较大的样本数目可以提高估计的准确性但会增加计算开销。
默认情况下maxmemory-samples 参数的值为 5。你可以根据实际情况进行调整。通常来说如果 Redis 实例的键数量很大适当增加 maxmemory-samples 的值可能会更好地捕捉键的热度变化。