Skip to content

Redis - 键

键是 Redis 数据模型的基本单位。所有数据都通过键存储和检索。本节涵盖了管理数据库中键生命周期的基本命令。

虽然 Redis 允许几乎任何二进制序列作为键,但采用一致的命名约定对于可维护性至关重要。常见模式是 对象类型:ID:字段。

  • 示例: user:1001:profile
  • 优势: 提高可读性,有助于组织键,并防止命名冲突。

让我们使用 redis-cli 逐步讲解一组常见的键操作。

# 1. 设置用户会话 ID 的键。'EX' 选项设置过期时间为 60 秒。
127.0.0.1:6379> SET session:user:42 'a_long_session_string' EX 60
OK
# 2. 检查键是否存在。
127.0.0.1:6379> EXISTS session:user:42
(integer) 1
# 3. 检查其剩余生存时间(秒)。
127.0.0.1:6379> TTL session:user:42
(integer) 55
# 4. 我们可以通过移除过期时间使键永久存在。
127.0.0.1:6379> PERSIST session:user:42
(integer) 1
# 5. 现在,其 TTL 为 -1,表示它不会过期。
127.0.0.1:6379> TTL session:user:42
(integer) -1
# 6. 让我们为了存档目的重命名该键。
127.0.0.1:6379> RENAME session:user:42 archived:session:user:42
OK
# 7. 验证旧键是否不再存在。
127.0.0.1:6379> EXISTS session:user:42
(integer) 0
# 8. 最后,删除该键。
127.0.0.1:6379> DEL archived:session:user:42
(integer) 1

以下是键管理的基本命令列表。

CommandDescription
DEL key [key …]删除一个或多个指定的键。返回被删除键的数量。
EXISTS key [key …]检查一个或多个键是否存在。返回存在的键的数量。
EXPIRE key seconds设置键的生存时间(TTL),单位秒。
PEXPIRE key milliseconds设置键的生存时间(TTL),单位毫秒。
TTL key返回键的剩余生存时间,单位秒。
PTTL key返回键的剩余生存时间,单位毫秒。
PERSIST key移除键的过期时间,使其永久存在。
RENAME key newkey重命名一个键。如果 newkey 已存在,则覆盖它。
RENAMENX key newkey重命名一个键,仅当 newkey 不存在时才执行。
TYPE key返回键存储的数据类型的字符串表示(例如,‘string’、‘list’、‘hash’)。
RANDOMKEY从数据库中返回一个随机的键名。在大型数据库上使用时请谨慎。
TOUCH key [key …]更新键的最后访问时间。不修改值。对于某些逐出策略很有用。

KEYS 命令,例如 KEYS user:*,查找所有匹配模式的键。警告: KEYS 是一个阻塞操作,它会扫描整个键空间。在生产数据库上运行它可能导致长时间无响应。在生产环境中应避免使用此命令。

SCAN 是推荐的非阻塞替代方案。它允许你增量地迭代键空间,每次调用返回一小批键和一个新的游标。这可以防止服务器冻结。

# 从游标 0 开始扫描。MATCH 查找带有 'user:' 前缀的键。
127.0.0.1:6379> SCAN 0 MATCH user:* COUNT 100
1) "1720"
2) 1) "user:1001:profile"
2) "user:42"
3) "user:99"
# 下一次调用使用上一次返回的新游标 '1720'。
127.0.0.1:6379> SCAN 1720 MATCH user:* COUNT 100
1) "0"
2) 1) "user:500"
# 当返回的游标是 '0' 时,扫描完成。