当前位置:首页 > 内存 > 正文

内存淘汰策略

  • 内存
  • 2024-06-08 15:17:10
  • 2137

一、Redis过期淘汰策略?Redis中的数据过期策略采用定期删除+惰性删除策略。
定期删除策略:Redis启用定时器,定期监控所有key,判断key是否过期,过期则删除。这种策略可以保证过期的key最终会被删除,但是它也有严重的缺点:每次都要遍历内存中的所有数据,消耗大量的CPU资源,并且当key已经过期但定时器还处于唤醒状态时条件下,这段时间内Key仍然可以使用。
惰性删除策略:当获取到key后,首先查找key是否过期,过期则删除。这种方法有一个缺点:如果不使用密钥,它就会一直在内存中。其实已经过期了,会浪费很多空间。
2.常规删除+惰性删除策略是如何实现的?
这两种策略天然是互补的,结合后,计划中的删除策略发生了一些变化。它不再每次扫描所有密钥,而是随机选择一部分密钥进行检查,减少对CPU的影响。资源消耗和惰性删除策与不受控键相辅相成,基本满足了所有要求。但有时就是这么巧合,既没有从定时器中拔出来,也没有被使用。这些数据是如何从内存中消失的呢?没关系,这也是一种记忆消除机制。当内存不够的时候,内存淘汰机制就会发挥作用。Redis内存驱逐机制有以下策略:
noeviction:当内存不足以容纳新写入的数据时,新的写入操作会报错。(Redis默认策略)allkeys-lru:当内存不足以容纳新写入的数据时,移除keyspace中最后使用的key。(推荐)
allkeys-random:当内存不足以容纳新写入的数据时,从密钥空间中随机删除一个密钥。
volatile-lru:当内存不足以容纳新写入的数据时,删除键空间中最后使用的键,并设置过期时间。当Redis同时用作缓存和持久存储时,通常会出现这种情况。
volatile-random:当内存不足以容纳新写入的数据时,从密钥空间中随机删除一个密钥,并设置过期时间。
volatile-ttl:当内存不足以容纳新写入的数据时,会优先移除有过期时间的键空间中过期时间较早的键。要改变内存淘汰机制,只需要在配置文件中配置maxmemory-policy参数即可。
二、redis淘汰策略有哪些收入消除的方法主要有以下三种:
1.
(LeastRecentlyUsed):最近最少使用消除。
(FirstInFirstOut):先进先出。
在实际使用中,可以根据应用场景选择合适的淘汰策略。例如,如果数据量较大,访问频率不高,可以选择LRU或FIFO;因为当内存不足时,数据的大小会被不断压缩,以存储更多的数据。
Redis淘汰的方式主要有3种,可以根据实际使用的需要进行选择和适配。