Redis - 键
Redis - 键管理
Section titled “Redis - 键管理”键是 Redis 数据模型的基本单位。所有数据都通过键存储和检索。本节涵盖了管理数据库中键生命周期的基本命令。
最佳实践:键命名约定
Section titled “最佳实践:键命名约定”虽然 Redis 允许几乎任何二进制序列作为键,但采用一致的命名约定对于可维护性至关重要。常见模式是 对象类型:ID:字段。
- 示例:
user:1001:profile - 优势: 提高可读性,有助于组织键,并防止命名冲突。
基本键操作:逐步讲解
Section titled “基本键操作:逐步讲解”让我们使用 redis-cli 逐步讲解一组常见的键操作。
# 1. 设置用户会话 ID 的键。'EX' 选项设置过期时间为 60 秒。127.0.0.1:6379> SET session:user:42 'a_long_session_string' EX 60OK
# 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:42OK
# 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常用键管理命令
Section titled “常用键管理命令”以下是键管理的基本命令列表。
| Command | Description |
|---|---|
| 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 …] | 更新键的最后访问时间。不修改值。对于某些逐出策略很有用。 |
搜索键:SCAN 对比 KEYS
Section titled “搜索键:SCAN 对比 KEYS”KEYS 命令的危险性
Section titled “KEYS 命令的危险性”KEYS 命令,例如 KEYS user:*,查找所有匹配模式的键。警告: KEYS 是一个阻塞操作,它会扫描整个键空间。在生产数据库上运行它可能导致长时间无响应。在生产环境中应避免使用此命令。
现代解决方案:SCAN
Section titled “现代解决方案:SCAN”SCAN 是推荐的非阻塞替代方案。它允许你增量地迭代键空间,每次调用返回一小批键和一个新的游标。这可以防止服务器冻结。
# 从游标 0 开始扫描。MATCH 查找带有 'user:' 前缀的键。127.0.0.1:6379> SCAN 0 MATCH user:* COUNT 1001) "1720"2) 1) "user:1001:profile" 2) "user:42" 3) "user:99"
# 下一次调用使用上一次返回的新游标 '1720'。127.0.0.1:6379> SCAN 1720 MATCH user:* COUNT 1001) "0"2) 1) "user:500"
# 当返回的游标是 '0' 时,扫描完成。