Redis的命令按功能可以分为几个大类,下面整理了最常用的一些命令。
🔑 通用命令
这些命令不针对特定数据类型,用于日常管理和操作。
| 命令 | 作用 | 示例 |
|---|---|---|
PING | 测试与服务器的连接是否正常,正常会返回PONG。 | PING |
SELECT index | 切换到指定的数据库(默认有16个,索引从0开始)。 | SELECT 1 |
KEYS pattern | 查找所有符合给定模式(pattern)的key。生产环境慎用,可能阻塞服务。 | KEYS user:* |
SCAN cursor | 迭代当前数据库中的key,是KEYS命令的安全替代方案。 | SCAN 0 MATCH user:* COUNT 10 |
EXISTS key | 检查一个或多个key是否存在。 | EXISTS myKey |
DEL key | 删除指定的一个或多个key。 | DEL myKey yourKey |
TYPE key | 返回key所存储的值的数据类型。 | TYPE myKey |
EXPIRE key seconds | 为给定的key设置过期时间,单位是秒。 | EXPIRE session:123 1800 |
TTL key | 以秒为单位,返回给定key的剩余生存时间。 | TTL session:123 |
PERSIST key | 移除给定key的过期时间,使其永不过期。 | PERSIST session:123 |
📊 各数据类型专属命令
Redis支持多种数据结构,每种都有其专用的命令。
1. 字符串 (String)
最基础的类型,适合缓存、计数器等。
| 命令 | 作用 | 示例 |
|---|---|---|
SET key value | 设置指定key的值。 | SET user:1 "Alice" |
GET key | 获取指定key的值。 | GET user:1 |
MSET key value [key value ...] | 批量设置多个key的值。 | MSET name "Bob" age "30" |
MGET key [key ...] | 批量获取多个key的值。 | MGET name age |
INCR key | 将key中存储的数字值加1。 | INCR page_views |
DECR key | 将key中存储的数字值减1。 | DECR stock |
INCRBY key increment | 将key中存储的数字值增加指定的步长。 | INCRBY counter 10 |
APPEND key value | 如果key已经存在,将value追加到原值的末尾。 | APPEND msg " world" |
STRLEN key | 返回key所存储的字符串值的长度。 | STRLEN msg |
2. 哈希 (Hash)
适合存储对象,如用户信息、商品详情等。
| 命令 | 作用 | 示例 |
|---|---|---|
HSET key field value | 为哈希表中的字段赋值。 | HSET user:1000 name "Alice" |
HGET key field | 获取哈希表中指定字段的值。 | HGET user:1000 name |
HMSET key field value [field value ...] | 批量设置哈希表中的多个字段。 | HMSET user:1000 name "Alice" age "25" |
HMGET key field [field ...] | 批量获取哈希表中多个字段的值。 | HMGET user:1000 name age |
HGETALL key | 获取哈希表中所有的字段和值。 | HGETALL user:1000 |
HDEL key field | 删除哈希表中的一个或多个字段。 | HDEL user:1000 age |
HINCRBY key field increment | 为哈希表中指定字段的整数值加上增量。 | HINCRBY user:1000 score 5 |
HEXISTS key field | 判断哈希表中是否存在某个字段。 | HEXISTS user:1000 name |
HLEN key | 获取哈希表中字段的数量。 | HLEN user:1000 |
3. 列表 (List)
双向链表结构,适合消息队列、最新消息列表等场景。
| 命令 | 作用 | 示例 |
|---|---|---|
LPUSH key value [value ...] | 将一个或多个值插入到列表的头部(左侧)。 | LPUSH tasks "task1" |
RPUSH key value [value ...] | 将一个或多个值插入到列表的尾部(右侧)。 | RPUSH tasks "task3" |
LPOP key | 移除并返回列表头部的元素。 | LPOP tasks |
RPOP key | 移除并返回列表尾部的元素。 | RPOP tasks |
LRANGE key start stop | 返回列表指定区间内的元素(0表示第一个,-1表示最后一个)。 | LRANGE messages 0 -1 |
BLPOP key [key ...] timeout | 阻塞式地从列表头部弹出元素,若列表为空则等待超时。 | BLPOP alerts 30 |
4. 集合 (Set)
无序且唯一的集合,适合去重、共同好友等场景。
| 命令 | 作用 | 示例 |
|---|---|---|
SADD key member [member ...] | 向集合中添加一个或多个成员。 | SADD tags "redis" "db" |
SMEMBERS key | 返回集合中的所有成员。 | SMEMBERS tags |
SISMEMBER key member | 判断成员是否存在于集合中。 | SISMEMBER tags "redis" |
SREM key member [member ...] | 移除集合中的一个或多个成员。 | SREM tags "db" |
SINTER key [key ...] | 返回多个集合的交集。 | SINTER group1 group2 |
SUNION key [key ...] | 返回多个集合的并集。 | SUNION all_users |
SDIFF key [key ...] | 返回第一个集合与其他集合的差集。 | SDIFF group1 group2 |
SCARD key | 获取集合中成员的数量。 | SCARD tags |
SPOP key [count] | 随机移除并返回集合中的一个或多个成员。 | SPOP lottery 3 |
5. 有序集合 (Sorted Set)
每个元素关联一个分数,按分数排序,适合排行榜等场景。
| 命令 | 作用 | 示例 |
|---|---|---|
ZADD key score member [score member ...] | 向有序集合中添加一个或多个成员,或更新其分数。 | ZADD leaderboard 100 "PlayerA" |
ZRANGE key start stop [WITHSCORES] | 按分数从小到大,返回指定索引范围内的成员。 | ZRANGE leaderboard 0 2 WITHSCORES |
ZREVRANGE key start stop [WITHSCORES] | 按分数从大到小,返回指定索引范围内的成员。 | ZREVRANGE leaderboard 0 2 |
ZREM key member [member ...] | 移除有序集合中的一个或多个成员。 | ZREM leaderboard "PlayerB" |
ZINCRBY key increment member | 为有序集合中指定成员的分数增加增量。 | ZINCRBY leaderboard 10 "PlayerA" |
ZRANK key member | 返回成员按分数从小到大排序的排名(从0开始)。 | ZRANK leaderboard "PlayerA" |
ZCARD key | 获取有序集合中成员的数量。 | ZCARD leaderboard |
ZCOUNT key min max | 计算分数在指定区间内的成员数量。 | ZCOUNT leaderboard 50 100 |
🛠️ 服务器与高级功能
除了数据操作,Redis还提供了丰富的管理和高级功能命令。
| 命令 | 作用 | 示例 |
|---|---|---|
| 服务器管理 | ||
DBSIZE | 返回当前数据库中key的数量。 | DBSIZE |
FLUSHDB | 清空当前数据库中的所有key(谨慎操作)。 | FLUSHDB |
FLUSHALL | 清空所有数据库中的所有key(非常谨慎操作)。 | FLUSHALL |
INFO [section] | 返回关于Redis服务器的各种信息和统计。 | INFO memory |
CONFIG GET parameter | 获取Redis服务器的配置参数。 | CONFIG GET maxmemory |
| 持久化 | ||
SAVE | 同步执行,将数据保存到磁盘,会阻塞主线程。 | SAVE |
BGSAVE | 异步执行,在后台将数据保存到磁盘,不阻塞主线程。 | BGSAVE |
| 事务 | ||
MULTI | 标记一个事务块的开始。 | MULTI |
EXEC | 执行所有在MULTI之后入队的命令。 | EXEC |
DISCARD | 取消事务,放弃执行事务块内的所有命令。 | DISCARD |
| 发布订阅 | ||
SUBSCRIBE channel | 订阅给定的一个或多个频道。 | SUBSCRIBE news |
PUBLISH channel message | 向指定频道发送消息。 | PUBLISH news "Hello" |
💡 使用建议
- 生产环境慎用
KEYS:它可能会阻塞Redis服务,线上环境建议使用SCAN命令进行迭代。 - 清空操作极其危险:
FLUSHDB和FLUSHALL命令会永久删除数据,在执行前请务必确认。 - 性能与安全:
MONITOR等调试命令会影响性能,建议仅在必要时使用。