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等调试命令会影响性能,建议仅在必要时使用。