教程 redis tutorial

Key 过期策略

Redis 提供了多种方式来处理键的过期情况,确保在数据不再需要时能够及时删除,从而优化内存使用。过期策略决定了 Redis 如何管理和清理过期键。

设置过期时间

可以使用 EXPIRE 命令为键设置过期时间,过期时间单位为秒:

bash
EXPIRE key seconds
  • 例如,将 mykey 的过期时间设置为 60 秒:
bash
EXPIRE mykey 60

也可以使用其他命令设置过期时间:

  • TTL:查看键的剩余过期时间(秒)
bash
TTL key
  • PERSIST:移除键的过期时间,使键永不过期
bash
PERSIST key
  • EXPIREAT:指定具体的过期时间(UNIX 时间戳)
bash
EXPIREAT key timestamp

过期策略

Redis 采用了三种主要的过期策略来清理过期的键:

1. 定时删除(主动过期)

Redis 会在每次访问数据库时检查键是否过期,并在键过期时立即删除。这是一个比较轻量的方式。

2. 惰性删除(延迟过期)

当 Redis 访问一个键时,如果该键已过期,会在访问时删除该键。惰性删除并不会遍历所有的键,而是仅在访问到某个键时检查其是否过期。

3. 定期删除(周期性过期)

Redis 会定期扫描一部分键,检查它们是否过期,并将过期的键删除。这个过程会在后台线程中执行,不会影响主线程的性能。

配置过期策略

在 redis.conf 文件中,可以配置 Redis 执行定期过期检查的频率:

txt
# 每 10 秒钟扫描一次过期键,扫描 10 个键
hz 10

hz 选项控制了 Redis 扫描过期键的频率,默认为 10,这意味着 Redis 每 10 毫秒会进行一次扫描。

过期键的清理机制

  • 懒删除:惰性删除机制,只有在客户端访问过期键时,Redis 才会删除该键。
  • 定期删除:周期性地扫描部分键并删除过期的键,防止内存溢出。
  • 过期精度:由于过期时间是通过精确到秒来控制的,Redis 允许过期时间的精度误差为 1 秒。

使用场景

  • 缓存:用于定期清理不再需要的数据,避免内存占用过大。
  • 会话管理:比如用户登录的 session 会在一定时间后过期。
  • 临时数据存储:需要在短期内存储的数据,使用过期时间确保不再需要时自动删除。

注意事项

  • 内存管理:过期策略有助于控制内存占用,但在高负载场景下,定期删除和惰性删除可能会引起一定的性能影响。
  • 精确性:由于 Redis 使用秒级过期时间,过期时间的精度可能不是特别精确(最大误差为 1 秒)。
  • 无过期键:如果设置了过期时间后键没有过期,Redis 不会自动删除这些键,因此需要手动管理过期键的清理。

通过合理配置 Redis 的过期策略,能够高效管理内存和处理不再需要的数据,保证系统的性能和稳定性。