redis 命令大全整理中文讲解
Redis(Remote Dictionary Server)是一个高性能的键值对数据库,广泛用于缓存、消息队列、会话存储等场景。以下是 Redis 常用命令的整理和中文讲解,涵盖核心数据结构(字符串、列表、集合、哈希、有序集合等)以及其他常用功能,适合初学者和开发者快速参考。所有命令按功能分类,包含用法、示例和注意事项。
一、Redis 命令分类
Redis 命令主要分为以下几类:
- 键(Key)操作:管理键的增删改查。
- 字符串(String)操作:处理最基本的数据类型。
- 列表(List)操作:处理有序的元素序列。
- 集合(Set)操作:处理无序、不重复的元素集合。
- 有序集合(Sorted Set)操作:处理带分数的有序元素集合。
- 哈希(Hash)操作:处理键值对集合。
- 其他功能:事务、发布/订阅、持久化等。
以下命令假设使用 Redis CLI 或客户端,命令不区分大小写。
二、Redis 命令大全及讲解
1. 键(Key)操作
这些命令用于管理 Redis 中的键。
命令 | 功能 | 示例 | 说明 |
---|---|---|---|
SET key value | 设置键值对 | SET name "Alice" | 将键 name 的值设为 Alice 。 |
GET key | 获取键的值 | GET name | 返回 Alice ,若键不存在返回 (nil) 。 |
DEL key [key ...] | 删除键 | DEL name | 删除键 name ,返回删除的键数量。 |
EXISTS key [key ...] | 检查键是否存在 | EXISTS name | 存在返回 1,不存在返回 0。 |
KEYS pattern | 查找匹配模式的键 | KEYS user* | 返回以 user 开头的键列表,慎用(性能低)。 |
EXPIRE key seconds | 设置键的过期时间(秒) | EXPIRE name 60 | 键 name 在 60 秒后过期。 |
TTL key | 查看键的剩余生存时间 | TTL name | 返回剩余秒数,-1 表示无过期时间,-2 表示键不存在。 |
TYPE key | 查看键的数据类型 | TYPE name | 返回 string 、list 、set 等。 |
RENAME key newkey | 重命名键 | RENAME name username | 将键 name 重命名为 username 。 |
注意:
KEYS
在生产环境中慎用,可能导致性能问题,推荐使用SCAN
替代。- 过期时间支持
PEXPIRE
(毫秒)和EXPIREAT
(指定时间戳)。
示例:
SET user:1 "Alice"
GET user:1 # 输出: "Alice"
EXPIRE user:1 10
TTL user:1 # 输出: 10(秒)
DEL user:1
GET user:1 # 输出: (nil)
2. 字符串(String)操作
字符串是 Redis 最基本的数据类型,可存储文本、数字或二进制数据。
命令 | 功能 | 示例 | 说明 |
---|---|---|---|
SET key value | 设置字符串值 | SET count 100 | 设置键 count 的值为 100 。 |
GET key | 获取字符串值 | GET count | 返回 100 。 |
INCR key | 键值加 1 | INCR count | 返回 101,原子操作。 |
DECR key | 键值减 1 | DECR count | 返回 99,原子操作。 |
INCRBY key increment | 键值增加指定值 | INCRBY count 5 | 返回 105。 |
DECRBY key decrement | 键值减少指定值 | DECRBY count 5 | 返回 95。 |
APPEND key value | 追加字符串 | APPEND greeting "Hello" | 若 greeting 为 Hi ,结果为 HiHello 。 |
STRLEN key | 获取字符串长度 | STRLEN greeting | 返回字符串长度。 |
GETRANGE key start end | 获取子字符串 | GETRANGE greeting 0 1 | 返回 Hi 。 |
注意:
- 字符串操作适合计数器(如浏览量)、缓存数据等场景。
- 最大字符串长度为 512MB。
示例:
SET page_views 1000
INCR page_views # 输出: 1001
INCRBY page_views 10 # 输出: 1011
APPEND message "World"
GET message # 输出: "World"
3. 列表(List)操作
列表是按插入顺序存储的字符串序列,支持两端操作(类似双端队列)。
命令 | 功能 | 示例 | 说明 |
---|---|---|---|
LPUSH key value [value ...] | 从左侧插入 | LPUSH queue "task1" | 将 task1 插入列表头部。 |
RPUSH key value [value ...] | 从右侧插入 | RPUSH queue "task2" | 将 task2 插入列表尾部。 |
LPOP key | 从左侧弹出 | LPOP queue | 返回并移除头部元素。 |
RPOP key | 从右侧弹出 | RPOP queue | 返回并移除尾部元素。 |
LLEN key | 获取列表长度 | LLEN queue | 返回元素数量。 |
LRANGE key start end | 获取列表范围 | LRANGE queue 0 -1 | 返回全部元素(-1 表示末尾)。 |
LREM key count value | 删除指定元素 | LREM queue 1 "task1" | 删除 1 个 task1 。 |
LINDEX key index | 获取指定索引元素 | LINDEX queue 0 | 返回头部元素。 |
注意:
- 列表适合实现队列、栈或消息队列。
- 索引从 0 开始,负数表示从尾部计数(如 -1 为最后一个元素)。
示例:
LPUSH tasks "task1" "task2"
RPUSH tasks "task3"
LRANGE tasks 0 -1 # 输出: ["task2", "task1", "task3"]
LPOP tasks # 输出: "task2"
LLEN tasks # 输出: 2
4. 集合(Set)操作
集合是无序、不重复的字符串集合,适合去重或成员关系检查。
命令 | 功能 | 示例 | 说明 |
---|---|---|---|
SADD key member [member ...] | 添加成员 | SADD users "Alice" "Bob" | 添加成员到集合。 |
SMEMBERS key | 获取所有成员 | SMEMBERS users | 返回 ["Alice", "Bob"] 。 |
SREM key member [member ...] | 删除成员 | SREM users "Alice" | 删除 Alice ,返回删除数量。 |
SISMEMBER key member | 检查成员是否存在 | SISMEMBER users "Bob" | 存在返回 1,不存在返回 0。 |
SCARD key | 获取集合大小 | SCARD users | 返回成员数量。 |
SINTER key [key ...] | 求交集 | SINTER set1 set2 | 返回多个集合的交集。 |
SUNION key [key ...] | 求并集 | SUNION set1 set2 | 返回多个集合的并集。 |
SDIFF key [key ...] | 求差集 | SDIFF set1 set2 | 返回 set1 中不在 set2 的元素。 |
注意:
- 集合适合去重、标签系统或共同好友查询。
- 集合操作高效,适合大数据量处理。
示例:
SADD group1 "Alice" "Bob"
SADD group2 "Bob" "Charlie"
SINTER group1 group2 # 输出: ["Bob"]
SUNION group1 group2 # 输出: ["Alice", "Bob", "Charlie"]
SISMEMBER group1 "Alice" # 输出: 1
5. 有序集合(Sorted Set)操作
有序集合为每个成员关联一个分数,按分数排序,适合排行榜等场景。
命令 | 功能 | 示例 | 说明 |
---|---|---|---|
ZADD key score member [score member ...] | 添加成员及分数 | ZADD leaderboard 100 "Alice" | 添加 Alice 分数 100。 |
ZRANGE key start end [WITHSCORES] | 获取范围成员 | ZRANGE leaderboard 0 -1 | 返回所有成员,WITHSCORES 返回分数。 |
ZSCORE key member | 获取成员分数 | ZSCORE leaderboard "Alice" | 返回 100。 |
ZINCRBY key increment member | 增加成员分数 | ZINCRBY leaderboard 10 "Alice" | 分数增为 110。 |
ZREM key member [member ...] | 删除成员 | ZREM leaderboard "Alice" | 删除 Alice 。 |
ZCARD key | 获取成员数量 | ZCARD leaderboard | 返回成员数量。 |
ZRANK key member | 获取成员排名 | ZRANK leaderboard "Alice" | 返回排名(从 0 开始)。 |
注意:
- 分数可以是浮点数,成员唯一。
- 适合排行榜、优先级队列等。
示例:
ZADD scores 100 "Alice" 90 "Bob"
ZRANGE scores 0 -1 WITHSCORES # 输出: ["Bob", "90", "Alice", "100"]
ZINCRBY scores 5 "Bob" # 输出: 95
ZRANK scores "Bob" # 输出: 0(最低分排名)
6. 哈希(Hash)操作
哈希存储键值对,适合表示对象(如用户信息)。
命令 | 功能 | 示例 | 说明 |
---|---|---|---|
HSET key field value | 设置字段值 | HSET user:1 name "Alice" | 设置 user:1 的 name 字段。 |
HGET key field | 获取字段值 | HGET user:1 name | 返回 Alice 。 |
HGETALL key | 获取所有字段和值 | HGETALL user:1 | 返回字段和值对。 |
HDEL key field [field ...] | 删除字段 | HDEL user:1 name | 删除 name 字段。 |
HKEYS key | 获取所有字段 | HKEYS user:1 | 返回字段列表。 |
HVALS key | 获取所有值 | HVALS user:1 | 返回值列表。 |
HLEN key | 获取字段数量 | HLEN user:1 | 返回字段数量。 |
注意:
- 哈希适合存储结构化数据,节省空间。
- 字段和值都是字符串。
示例:
HSET user:1 name "Alice" age "25"
HGETALL user:1 # 输出: ["name", "Alice", "age", "25"]
HGET user:1 age # 输出: "25"
HDEL user:1 age
HKEYS user:1 # 输出: ["name"]
7. 其他常用命令
事务
命令 | 功能 | 示例 | 说明 |
---|---|---|---|
MULTI | 开始事务 | MULTI | 标记事务开始。 |
EXEC | 执行事务 | EXEC | 执行所有排队命令。 |
DISCARD | 取消事务 | DISCARD | 取消事务中的命令。 |
示例:
MULTI
SET count 100
INCR count
EXEC # 输出: ["OK", 101]
发布/订阅
命令 | 功能 | 示例 | 说明 |
---|---|---|---|
PUBLISH channel message | 发布消息 | PUBLISH news "Hello" | 向 news 频道发布消息。 |
SUBSCRIBE channel [channel ...] | 订阅频道 | SUBSCRIBE news | 订阅 news 频道。 |
示例:
# 终端 1
SUBSCRIBE news
# 终端 2
PUBLISH news "Hello, World!" # 终端 1 接收到消息
数据库管理
命令 | 功能 | 示例 | 说明 |
---|---|---|---|
SELECT index | 切换数据库 | SELECT 1 | 切换到数据库 1(默认 0)。 |
FLUSHDB | 清空当前数据库 | FLUSHDB | 删除当前数据库所有键。 |
FLUSHALL | 清空所有数据库 | FLUSHALL | 删除所有数据库的键。 |
三、注意事项
- 性能优化:
- 避免在生产环境使用
KEYS
,改用SCAN
迭代查询。 - 大数据量操作(如大列表或集合)可能影响性能,合理设计键结构。
- 数据类型选择:
- 选择合适的数据结构(如计数用字符串,排行榜用有序集合)。
- 哈希适合存储对象,集合适合去重。
- 持久化与备份:
- Redis 支持 RDB 和 AOF 持久化,生产环境需配置以防数据丢失。
- 安全:
- 设置密码(
requirepass
配置)。 - 限制命令(如禁用
FLUSHALL
)。
四、综合示例
以下是一个综合使用 Redis 命令的 Python 脚本示例,展示常见操作:
import redis
连接 Redis
r = redis.Redis(host=’localhost’, port=6379, decode_responses=True)
字符串操作
r.set(‘name’, ‘Alice’)
print(r.get(‘name’)) # 输出: Alice
r.incr(‘counter’) # 计数器加 1
print(r.get(‘counter’)) # 输出: 1
列表操作
r.lpush(‘tasks’, ‘task1’, ‘task2’)
r.rpush(‘tasks’, ‘task3’)
print(r.lrange(‘tasks’, 0, -1)) # 输出: [‘task2’, ‘task1’, ‘task3’]
集合操作
r.sadd(‘users’, ‘Alice’, ‘Bob’)
print(r.smembers(‘users’)) # 输出: {‘Alice’, ‘Bob’}
有序集合操作
r.zadd(‘leaderboard’, {‘Alice’: 100, ‘Bob’: 90})
print(r.zrange(‘leaderboard’, 0, -1, withscores=True)) # 输出: [(‘Bob’, 90.0), (‘Alice’, 100.0)]
哈希操作
r.hset(‘user:1’, mapping={‘name’: ‘Alice’, ‘age’: ’25’})
print(r.hgetall(‘user:1’)) # 输出: {‘name’: ‘Alice’, ‘age’: ’25’}
设置过期时间
r.set(‘temp’, ‘temporary’, ex=10) # 10秒后过期
print(r.ttl(‘temp’)) # 输出: 10(秒)
运行说明:
- 需安装
redis-py
:pip install redis
。 - 确保 Redis 服务器运行(默认
localhost:6379
)。 - 脚本展示了字符串、列表、集合、有序集合和哈希的基本操作。
五、学习与实践建议
- 安装 Redis:
- 下载并安装 Redis(官网)。
- Linux 示例:
sudo apt install redis-server
。 - 测试:运行
redis-cli
并输入PING
,返回PONG
表示成功。
- 练习命令:
- 使用
redis-cli
逐一尝试上述命令。 - 编写脚本(如 Python、Node.js)调用 Redis。
- 推荐资源:
- Redis 官方文档:命令参考。
- Redis University:免费教程。
- 《Redis 实战》(Josiah L. Carlson):深入学习。
- 项目实践:
- 实现缓存系统:用字符串存储网页内容。
- 实现排行榜:用有序集合存储用户分数。
- 实现消息队列:用列表存储任务。
六、总结
- Redis 命令覆盖键管理、多种数据结构(字符串、列表、集合、有序集合、哈希)以及事务、发布/订阅等功能。
- 命令简单易用,但需注意性能和安全问题。
- 通过
redis-cli
或编程语言(如 Python)实践,能快速掌握 Redis。 - 适合场景:缓存、实时排行榜、消息队列、会话管理等。
如果需要特定命令的深入讲解、配置帮助或 Redis 在项目中的应用示例,请告诉我,我可以提供更详细的内容!