Redis常用语法

Redis 是一个高性能的开源内存数据存储系统,支持多种数据结构(如 String、Hash、List、Set、Sorted Set 等),常用于缓存、消息队列和排行榜等场景。本文记录了 Redis 的常用命令及其说明,方便你在学习和实际使用中快速参考。


目录


Redis 简介

Redis 是一个基于内存的 NoSQL 数据库,支持字符串、哈希、列表、集合和有序集合等数据结构。它既可以用作数据库也可以用作缓存或消息中间件,具有操作简洁、性能高效等优点。


基本数据结构

字符串 (String)

字符串是 Redis 中最基本的数据类型,用于存储简单的键值对,常见于缓存和计数器场景。

1
2
3
4
5
6
7
8
# 设置键 name 的值为 "Alice"
SET name "Alice" # 注:保存简单的字符串数据

# 获取键 name 的值
GET name # 注:返回 "Alice"

# 删除键 name
DEL name # 注:移除该键及其对应的值

哈希 (Hash)

哈希用于存储对象的属性集合,类似于 JSON 对象或数据库中的一行数据,适合存储用户信息等结构化数据。

1
2
3
4
5
6
7
8
# 为键 user:1001 设置多个字段及对应的值
HSET user:1001 name "Bob" age "25" # 注:user:1001 表示 ID 为 1001 的用户

# 获取 user:1001 中单个字段 name 的值
HGET user:1001 name # 注:返回 "Bob"

# 获取 user:1001 中所有字段和值
HGETALL user:1001 # 注:返回所有键值对,如 name, age 等

列表 (List)

列表用于存储有序的数据集合,可以模拟栈或队列的操作。

1
2
3
4
5
6
7
8
9
10
11
# 从列表 mylist 的左侧插入多个元素
LPUSH mylist "apple" "apple" "banana" # 注:左侧插入,元素顺序为 [ "banana", "apple", "apple" ]

# 从列表 mylist 的右侧插入元素
RPUSH mylist "orange" # 注:右侧插入

# 从左侧弹出一个元素(类似栈的 pop 操作)
LPOP mylist # 注:弹出列表左边的第一个元素

# 获取列表中所有元素,从索引 0 到 -1(-1 表示最后一个元素)
LRANGE mylist 0 -1 # 注:返回整个列表

集合 (Set)

集合用于存储无序且唯一的元素,适用于去重处理、标签、好友列表等场景。

1
2
3
4
5
6
7
8
9
10
11
# 向集合 tags 中添加多个元素,重复的元素自动忽略
SADD tags "redis" "java" "database" "redis" # 注:第二个 "redis" 不会重复存储

# 获取集合 tags 中的所有成员
SMEMBERS tags # 注:返回集合所有元素(无序)

# 检查集合 tags 中是否存在某个元素
SISMEMBER tags "java" # 注:如果存在返回 1,否则返回 0

# 从集合 tags 中移除指定的元素
SREM tags "database" # 注:移除 "database" 元素

有序集合 (Sorted Set)

有序集合在存储元素时同时指定一个分数,根据分数自动排序,常用于排行榜场景。

1
2
3
4
5
6
7
8
# 向有序集合 leaderboard 添加成员及其分数
ZADD leaderboard 100 "Alice" 200 "Bob" # 注:分数越低排序越靠前

# 按从低到高顺序获取所有成员及其分数
ZRANGE leaderboard 0 -1 WITHSCORES # 注:返回所有元素及其分数

# 按从高到低顺序获取前两个成员及其分数
ZREVRANGE leaderboard 0 1 WITHSCORES # 注:返回分数最高的前两位成员

高级功能

事务

Redis 事务允许将一组命令打包成一个原子操作块,所有命令要么全部执行,要么全部不执行。

1
2
3
4
5
6
7
8
9
# 开始事务
MULTI # 注:标记事务开始

# 在事务中排队的命令
SET a 10 # 注:将键 a 设置为 10
INCR a # 注:对键 a 执行自增操作

# 执行事务中的所有排队命令
EXEC # 注:一次性执行 MULTI 与 EXEC 之间的所有命令

发布/订阅

发布/订阅(Pub/Sub)是 Redis 中的一种消息通信机制,允许客户端订阅频道,然后接收该频道发布的所有消息。

1
2
3
4
5
# 在一个终端中订阅频道 "news"
SUBSCRIBE news # 注:进入订阅模式,等待接收来自频道 "news" 的消息

# 在另一个终端中向频道 "news" 发布一条消息
PUBLISH news "Hello Redis!" # 注:发送消息 "Hello Redis!" 到频道 "news"

键操作

Redis 提供了很多命令来操作键,例如查找、设置过期时间和检查剩余生存时间。

1
2
3
4
5
6
7
8
# 查找所有以 user: 开头的键
KEYS user:* # 注:请谨慎使用,因为在大数据量情况下可能阻塞 Redis

# 为键 name 设置过期时间 60 秒
EXPIRE name 60 # 注:60 秒后键 name 将自动删除

# 查看键 name 剩余的过期时间(单位:秒)
TTL name # 注:返回剩余秒数,如果返回 -1 则表示永不过期

备注

  • 命名约定:例如 user:1001 表示类型为 user、ID 为 1001 的数据,有助于组织数据和避免键冲突。
  • 数据结构选择:根据业务场景选择合适的结构:
    • String 用于缓存和计数器;
    • Hash 用于对象属性存储;
    • List 可以实现栈、队列、消息队列等;
    • Set 用于去重或表示关系集合;
    • Sorted Set 用于排行榜和按顺序排列的数据。
  • 实战开发:在实际项目中,Redis 常与编程语言(如 Java、Python)的库结合使用,例如 Java 的 Jedis 或 Python 的 redis-py。
  • 注意事项
    • 在大数据量情况下,避免使用 KEYS 命令,可考虑 SCAN 命令。
    • 当采用事务、管道等高级功能时,应注意正确处理错误与回滚情况。

这份笔记覆盖了 Redis 常用语法和操作示例,希望能帮助你更好地理解和使用 Redis。如果有任何疑问或需要补充其他内容,欢迎进一步讨论!