Redis的六种淘汰策略

将 Redis 用作缓存时, 如果内存空间用满, 就会自动驱逐老的数据,淘汰那些老的或者不常用的部分keys,以保证新的数据写入成功。

Maxmemory配置指令
maxmemory配置指令用于配置Redis存储数据时指定限制的内存大小。通过redis.conf可以设置该指令,或者之后使用CONFIG SET命令来进行运行时配置。

例如为了配置内存限制为100mb,以下的指令可以放在redis.conf文件中。

maxmemory 100mb
设置maxmemory为0代表没有内存限制。对于64位的系统这是个默认值,对于32位的系统默认内存限制为3GB。

当指定的内存限制大小达到时,需要选择不同的行为,也就是策略。 Redis可以仅仅对命令返回错误,这将使得内存被使用得更多,或者回收一些旧的数据来使得添加数据时可以避免内存限制。

回收策略
当maxmemory限制达到的时候Redis会使用的行为由 Redis的maxmemory-policy配置指令来进行配置。

以下的策略是可用的:

  • noeviction:返回错误当内存限制达到并且客户端尝试执行会让更多内存被使用的命令(大部分的写入操作,但DEL和几个例外)。不进行移除。针对写操作,只是返回错误信息。
  • allkeys-lru: 尝试回收最少使用的键(LRU),使得新添加的数据有空间存放。使用LRU算法移除key。
  • volatile-lru: 尝试回收最少使用的键(LRU),但仅限于在过期集合的键,使得新添加的数据有空间存放。使用LRU算法移除key,只对设置了过期时间的键。
  • allkeys-random: 回收随机的键使得新添加的数据有空间存放。移除随机的key。
  • volatile-random: 回收随机的键使得新添加的数据有空间存放,但仅限于在过期集合的键。在过期集合中移除随机的key,只对设置了过期时间的键。
  • volatile-ttl: 回收在过期集合的键,并且优先回收存活时间(TTL)较短的键,使得新添加的数据有空间存放。移除那些TTL值最小的key,即那些最近要过期的key。

如果没有键满足回收的前提条件的话,策略volatile-lru, volatile-random以及volatile-ttl就和noeviction 差不多了。

选择正确的回收策略是非常重要的,这取决于你的应用的访问模式,不过你可以在运行时进行相关的策略调整,并且监控缓存命中率和没命中的次数,通过RedisINFO命令输出以便调优。

猜你喜欢

转载自blog.csdn.net/hxl2585530960/article/details/109309311