Skip to main content

Redis 键(Key)

1. 简介​

在 Redis 中,键(Key)是访问数据的唯一标识符。

2. 基本命令​

2.1 键的基本操作​

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

命令描述示例
EXISTS key检查键是否存在EXISTS user:1001
TYPE key返回键的数据类型TYPE user:1001
DEL key [key ...]删除一个或多个键DEL user:1001 user:1002
DUMP key序列化给定 key ,并返回被序列化的值DUMP user:1001
RENAME key newkey重命名键RENAME oldname newname
RENAMENX key newkey仅当 newkey 不存在时,将 key 改名为 newkeyRENAMENX oldname newname
KEYS pattern查找匹配模式的键KEYS user:*
SCAN cursor迭代数据库中的键SCAN 0 MATCH user:*
MOVE key db将当前数据库的 key 移动到给定的数据库 db 当中MOVE song 1
RANDOMKEY从当前数据库中随机返回一个 key

2.2 示例​

# 检查键是否存在
EXISTS user:1001
(integer) 0

# 重命名键
RENAME user:old user:new
OK

# 随机返回一个键
RANDOMKEY
"greeting"

3. 键的过期时间​

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

3.1 示例​

# 设置会话过期时间为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

4. 键的查找和遍历​

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

命令描述示例
KEYS pattern查找所有符合给定模式( pattern)的 keyKEYS user:*
SCAN cursor [MATCH pattern] [COUNT count]迭代数据库中的数据库键SCAN 0 MATCH user:* COUNT 10

4.1 KEYS 命令​

KEYS 命令支持模式匹配:

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

4.1.1 示例​

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

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

# 查找特定模式的键
KEYS user:100?
KEYS session:*

4.2 SCAN 命令​

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

4.2.1 示例​

# 开始扫描
SCAN 0

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

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

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

5. 键空间统计​

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

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

6. 实际应用场景​

6.1 用户会话管理​

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

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

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

# 删除会话
DEL session:abc123

6.2 缓存管理​

# 设置文章缓存
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