【Redis】Redis的数据删除(过期)策略,数据淘汰策略。

发布于:2025-03-20 ⋅ 阅读:(19) ⋅ 点赞:(0)

如果问到:假如Redis的key过期之后,会立即删除吗?
其实就是想问数据删除(过期)策略。

如果面试官问到:如果缓存过多,内存是有限的,内存被占满了怎么办?
其实就是问:数据的淘汰策略。

1.Redis的数据删除(过期)策略:

当Redis的key过期后,并不会立即删除。Redis使用以下两种策略来处理过期key的删除:

(1)惰性删除:

  • 原理: 当客户端尝试访问一个key时,Redis会检查该key是否过期。如果过期,则立即删除。
  • 优点: 节省CPU资源,只在访问时检查过期。
  • 缺点: 如果过期key长时间未被访问,会占用内存。

(2)定期删除:

  • 原理: Redis会定期随机抽取一部分key进行检查,删除其中过期的key。
  • 优点: 减少内存占用,避免过期key长时间未被删除。
  • 缺点: 可能会占用一定的CPU资源。

总结:

  • Redis的过期key删除是惰性删除+定期删除的结合。
  • 惰性删除确保访问时key是最新的,定期删除减少内存占用。

2.Redis的数据淘汰策略:

当Redis的内存被占满时,会根据配置的淘汰策略删除部分key以释放空间。以下几种淘汰策略:

(1)noeviction:

  • 原理: 当内存不足时,新写入操作会报错,不删除任何key
  • 适用场景:数据一致性要求极高的场景。

(2)allkeys-lru:

  • 原理: 从所有key中删除 最近最少使用(Least Recently Used LRU)的key。
  • 适用场景:适合大多数场景,优先保留最近使用的key。

(3)volatile-lru:

  • 原理: 从设置了过期时间的key中删除 最近最少使用的key。
  • 适用场景: 只淘汰过期key,适合需要保留永久数据的场景。

(4)allkeys-random:

  • 原理: 从所有key中随机删除key。
  • 适用场景: 适合key访问模式随机的场景。

(5)volatile-random:

  • 原理: 从设置了过期时间的key中随机删除key。
  • 适用场景: 只淘汰过期key,适合需要保留永久数据的场景。

(6)volatile-ttl:

  • 原理: 从设置了过期时间的key中删除剩余生存时间(TTL)最短的key。
  • 适用场景: 优先淘汰即将过期的key。

总结:

  • 常用策略:allkeys-lruvolatile-lru是最常用的淘汰策略。

3.应用场景:

3.1场景1:缓存系统

  • 需求: 优先保留最近使用的数据。
  • 策略: 使用allkeys-lru

3.2场景2: 会话系统

  • 需求: 只淘汰过期回话数据。
  • 策略: 使用volatile-lruvolatile-ttl

3.3随机访问模式:

  • 需求: 数据访问模式随机。
  • 策略: 使用allkeys-random

4.总结:

请添加图片描述