redis 命令大全整理中文讲解

Redis(Remote Dictionary Server)是一个高性能的键值对数据库,广泛用于缓存、消息队列、会话存储等场景。以下是 Redis 常用命令的整理和中文讲解,涵盖核心数据结构(字符串、列表、集合、哈希、有序集合等)以及其他常用功能,适合初学者和开发者快速参考。所有命令按功能分类,包含用法、示例和注意事项。


一、Redis 命令分类

Redis 命令主要分为以下几类:

  1. 键(Key)操作:管理键的增删改查。
  2. 字符串(String)操作:处理最基本的数据类型。
  3. 列表(List)操作:处理有序的元素序列。
  4. 集合(Set)操作:处理无序、不重复的元素集合。
  5. 有序集合(Sorted Set)操作:处理带分数的有序元素集合。
  6. 哈希(Hash)操作:处理键值对集合。
  7. 其他功能:事务、发布/订阅、持久化等。

以下命令假设使用 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 60name 在 60 秒后过期。
TTL key查看键的剩余生存时间TTL name返回剩余秒数,-1 表示无过期时间,-2 表示键不存在。
TYPE key查看键的数据类型TYPE name返回 stringlistset 等。
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键值加 1INCR count返回 101,原子操作。
DECR key键值减 1DECR count返回 99,原子操作。
INCRBY key increment键值增加指定值INCRBY count 5返回 105。
DECRBY key decrement键值减少指定值DECRBY count 5返回 95。
APPEND key value追加字符串APPEND greeting "Hello"greetingHi,结果为 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:1name 字段。
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删除所有数据库的键。

三、注意事项

  1. 性能优化
  • 避免在生产环境使用 KEYS,改用 SCAN 迭代查询。
  • 大数据量操作(如大列表或集合)可能影响性能,合理设计键结构。
  1. 数据类型选择
  • 选择合适的数据结构(如计数用字符串,排行榜用有序集合)。
  • 哈希适合存储对象,集合适合去重。
  1. 持久化与备份
  • Redis 支持 RDB 和 AOF 持久化,生产环境需配置以防数据丢失。
  1. 安全
  • 设置密码(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-pypip install redis
  • 确保 Redis 服务器运行(默认 localhost:6379)。
  • 脚本展示了字符串、列表、集合、有序集合和哈希的基本操作。

五、学习与实践建议

  1. 安装 Redis
  • 下载并安装 Redis(官网)。
  • Linux 示例:sudo apt install redis-server
  • 测试:运行 redis-cli 并输入 PING,返回 PONG 表示成功。
  1. 练习命令
  • 使用 redis-cli 逐一尝试上述命令。
  • 编写脚本(如 Python、Node.js)调用 Redis。
  1. 推荐资源
  1. 项目实践
  • 实现缓存系统:用字符串存储网页内容。
  • 实现排行榜:用有序集合存储用户分数。
  • 实现消息队列:用列表存储任务。

六、总结

  • Redis 命令覆盖键管理、多种数据结构(字符串、列表、集合、有序集合、哈希)以及事务、发布/订阅等功能。
  • 命令简单易用,但需注意性能和安全问题。
  • 通过 redis-cli 或编程语言(如 Python)实践,能快速掌握 Redis。
  • 适合场景:缓存、实时排行榜、消息队列、会话管理等。

如果需要特定命令的深入讲解、配置帮助或 Redis 在项目中的应用示例,请告诉我,我可以提供更详细的内容!

类似文章

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注