授课语音

Redis 的键过期策略与 EXPIRETTL 命令的使用

Redis 提供了键的过期机制,可以为每个键设置一个过期时间。过期的键会被自动删除,从而释放内存。合理利用过期策略,可以显著提升 Redis 的使用效率。


1. 键过期策略介绍

Redis 通过以下几种方式处理键的过期:

1.1 主动过期

  • Redis 定期检查部分键的过期时间,并主动删除已经过期的键。
  • 为了减少性能开销,这种检查是以“采样”的方式进行,并非扫描所有键。

1.2 惰性过期

  • 当客户端访问某个键时,Redis 会检查这个键是否已过期。如果已过期,则会删除该键。
  • 优点:只在必要时检查过期,减少不必要的计算。
  • 缺点:可能存在内存浪费的情况,因为某些键在过期后未被访问。

1.3 内存淘汰

  • 如果 Redis 的内存达到上限,可能会触发内存淘汰策略。已过期的键通常会优先被清理。

2. 设置键的过期时间

Redis 提供多个命令来设置键的过期时间:

2.1 EXPIRE 命令

EXPIRE 命令为指定的键设置过期时间(单位:秒)。

使用方法:

EXPIRE <key> <seconds>

示例:

SET user:123 "John Doe"  -- 设置一个键 "user:123"
EXPIRE user:123 60       -- 设置该键的过期时间为 60 秒

代码说明

  1. 使用 SET 命令创建键 user:123,值为 "John Doe"
  2. 通过 EXPIRE 命令设置键的生存时间为 60 秒。

2.2 PEXPIRE 命令

PEXPIRE 命令与 EXPIRE 类似,但时间单位是毫秒。

使用方法:

PEXPIRE <key> <milliseconds>

示例:

SET session:abc "active"
PEXPIRE session:abc 15000  -- 设置过期时间为 15000 毫秒(15 秒)

代码说明

  • PEXPIRE 设置更精确的过期时间,适合需要毫秒级控制的场景。

2.3 EXPIREATPEXPIREAT 命令

  • EXPIREAT 按指定的时间戳(以秒为单位)设置键的过期时间。
  • PEXPIREAT 按指定的时间戳(以毫秒为单位)设置键的过期时间。

示例:

SET order:456 "pending"
EXPIREAT order:456 1718300000  -- 设置键的过期时间为指定的时间戳(秒)

代码说明

  • 1718300000 是 Unix 时间戳,表示键将在该时间点过期。

3. 检查键的剩余时间

Redis 提供两个命令用于查询键的剩余生存时间:

3.1 TTL 命令

TTL 返回以秒为单位的剩余生存时间。

使用方法:

TTL <key>

示例:

SET cache:item "value"
EXPIRE cache:item 120        -- 设置键的过期时间为 120 秒
TTL cache:item               -- 查询剩余生存时间

代码说明

  • 假设距离过期还剩 90 秒,TTL 的返回值将是 90

3.2 PTTL 命令

PTTL 返回以毫秒为单位的剩余生存时间。

示例:

SET token "xyz"
PEXPIRE token 5000           -- 设置键的过期时间为 5000 毫秒
PTTL token                   -- 查询剩余生存时间(毫秒)

代码说明

  • 假设距离过期还剩 3000 毫秒,PTTL 的返回值将是 3000

4. 删除键的过期时间

Redis 提供 PERSIST 命令来移除键的过期时间,使其变为持久化键。

使用方法:

PERSIST <key>

示例:

SET temp:data "temporary"
EXPIRE temp:data 60          -- 设置过期时间为 60 秒
PERSIST temp:data            -- 删除过期时间,键将持久存在

代码说明

  • PERSIST 命令取消了键的过期限制,使键长期保留。

5. 注意事项与最佳实践

5.1 避免过多的过期键

  • 在高并发场景下,过多的过期键可能导致性能问题。
  • 建议分散键的过期时间,避免同一时间大规模的过期操作。

5.2 使用合理的过期时间

  • 根据业务需求,设置合理的过期时间。例如,用户会话可能设置较短的过期时间,而缓存数据可以设置更长的时间。

5.3 定期监控过期键

  • 使用 Redis 的慢查询日志和监控工具,检查过期键的处理情况,确保性能稳定。

6. 总结

Redis 的键过期功能是其内存管理的重要机制,通过 EXPIRETTL 等命令,我们可以轻松设置和查询键的过期时间。在实际应用中:

  • 合理设置过期时间可以减少内存占用。
  • 使用惰性过期和主动过期策略相结合的方式,确保高效管理键的生命周期。
  • 注意过期策略与业务逻辑的结合,提升系统的稳定性和用户体验。

掌握键过期策略和相关命令,可以帮助开发者更好地利用 Redis 的特性,提高系统性能和可维护性。

去1:1私密咨询

系列课程: