🔑 Redis 键(Key)

掌握 Redis 键的操作和管理技巧

Redis 键概述

在 Redis 中,键(Key)是访问数据的唯一标识符。合理的键设计和管理对于 Redis 的性能和可维护性至关重要。本章将详细介绍 Redis 键的各种操作和最佳实践。

🏷️ 键的命名规范

良好的键命名规范有助于提高代码的可读性和维护性:

推荐的命名模式:

  • user:1001:profile - 用户资料
  • session:abc123 - 会话信息
  • cache:article:1001 - 文章缓存
  • counter:page:views - 页面访问计数
  • lock:order:1001 - 订单锁

💡 命名建议

  • 使用冒号 ":" 作为分隔符
  • 采用层次化结构
  • 使用有意义的名称
  • 保持一致的命名风格
  • 避免过长的键名

🔍 键的基本操作

Redis 提供了丰富的键操作命令:

命令 描述 示例
EXISTS key 检查键是否存在 EXISTS user:1001
TYPE key 返回键的数据类型 TYPE user:1001
DEL key [key ...] 删除一个或多个键 DEL user:1001 user:1002
RENAME key newkey 重命名键 RENAME oldname newname
KEYS pattern 查找匹配模式的键 KEYS user:*
SCAN cursor 迭代数据库中的键 SCAN 0 MATCH user:*

⏰ 键的过期时间

Redis 支持为键设置过期时间,这对于缓存和临时数据非常有用:

命令 描述 示例
EXPIRE key seconds 设置键的过期时间(秒) EXPIRE session:abc123 3600
EXPIREAT key timestamp 设置键在指定时间戳过期 EXPIREAT key 1609459200
PEXPIRE key milliseconds 设置键的过期时间(毫秒) PEXPIRE key 60000
TTL key 查看键的剩余生存时间(秒) TTL session:abc123
PTTL key 查看键的剩余生存时间(毫秒) PTTL session:abc123
PERSIST key 移除键的过期时间 PERSIST session:abc123

过期时间示例:

# 设置会话过期时间为1小时
SET session:user123 "session_data"
EXPIRE session:user123 3600

# 检查剩余时间
TTL session:user123

# 设置缓存过期时间为30分钟
SET cache:article:1001 "article_content"
EXPIRE cache:article:1001 1800

🔍 键的查找和遍历

Redis 提供了多种方式来查找和遍历键:

KEYS 命令

KEYS 命令支持模式匹配:

  • * - 匹配任意数量的字符
  • ? - 匹配单个字符
  • [abc] - 匹配方括号内的任意字符
  • [a-z] - 匹配指定范围内的字符

KEYS 命令示例:

# 查找所有用户相关的键
KEYS user:*

# 查找所有缓存键
KEYS cache:*

# 查找特定模式的键
KEYS user:100?
KEYS session:[a-z]*

⚠️ 注意事项

KEYS 命令会阻塞服务器,在生产环境中应避免使用。推荐使用 SCAN 命令进行迭代。

SCAN 命令

SCAN 命令提供了非阻塞的键遍历方式:

SCAN 命令示例:

# 开始扫描
SCAN 0

# 带模式匹配的扫描
SCAN 0 MATCH user:*

# 限制返回数量
SCAN 0 MATCH user:* COUNT 10

# 继续扫描(使用返回的游标)
SCAN 17 MATCH user:*

📊 键空间统计

Redis 提供了一些命令来获取键空间的统计信息:

命令 描述 示例
DBSIZE 返回当前数据库的键数量 DBSIZE
INFO keyspace 显示键空间统计信息 INFO keyspace
RANDOMKEY 随机返回一个键 RANDOMKEY

实际应用示例

用户会话管理:

# 创建用户会话
SET session:abc123 "{\"user_id\": 1001, \"login_time\": 1609459200}"
EXPIRE session:abc123 7200  # 2小时过期

# 检查会话是否存在
EXISTS session:abc123

# 延长会话时间
EXPIRE session:abc123 7200

# 删除会话
DEL session:abc123

缓存管理:

# 设置文章缓存
SET cache:article:1001 "article content"
EXPIRE cache:article:1001 3600  # 1小时过期

# 批量删除缓存
KEYS cache:article:*
DEL cache:article:1001 cache:article:1002

# 清理过期缓存(使用SCAN避免阻塞)
SCAN 0 MATCH cache:* COUNT 100

💡 最佳实践

  • 使用有意义的键名,便于理解和维护
  • 为临时数据设置合适的过期时间
  • 生产环境避免使用 KEYS * 命令
  • 使用 SCAN 命令进行大量键的遍历
  • 定期监控键空间的使用情况
  • 合理规划键的命名空间