美文网首页
redis的内存回收策略

redis的内存回收策略

作者: 墨_0b54 | 来源:发表于2022-05-04 14:07 被阅读0次

当达到maxmemory限制时,Redis会使用由maxmemory-policy配置的行为。

  • noeviction:不进行置换,表示即使内存达到上限也不进行置换,所有能引起内存增加的命令都会返回error
  • allkeys-lru: 优先删除掉最近最不经常使用的key,用以保存新数据
  • allkeys-random: 随机回收一些key,使得新添加的数据有空间存放
  • volatile-lru: 只从设置失效(expire set)的key中选择最近最不经常使用的key进行删除,用以保存新数据
  • volatile-random: 只从设置失效(expire set)的key中,选择一些key进行删除,用以保存新数据
  • volatile-ttl: 只从设置失效(expire set)的key中,选出存活时间(TTL)最短的key进行删除,用以保存新数据

一般来说,有这样一些常用的经验:

  • 在所有的 key 都是最近最经常使用,那么就需要选择 allkeys-lru 进行置换最近最不经常使用的 key,如果你不确定使用哪种策略,那么推荐使用 allkeys-lru
  • 如果所有的 key 的访问概率都是差不多的,那么可以选用 allkeys-random 策略去置换数据
  • 如果对数据有足够的了解,能够为 key 指定 hint(通过expire/ttl指定),那么可以选择 volatile-ttl 进行置换

volatile-lru 和 volatile-random 经常在一个Redis实例既做cache又做持久化的情况下用到,然而,更好的选择使用两个Redis实例来解决这个问题。

设置是失效时间 expire 会占用一些内存,而采用 allkeys-lru 就没有必要设置失效时间,进而更有效的利用内存。

相关文章

网友评论

      本文标题:redis的内存回收策略

      本文链接:https://www.haomeiwen.com/subject/nlwwyrtx.html