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
命令进行大量键的遍历 - 定期监控键空间的使用情况
- 合理规划键的命名空间