服务器信息与管理
这类命令用于查看和配置 Redis 服务器的整体状态。
| 命令 |
描述 |
示例 |
INFO [section] |
获取 Redis 服务器的各种信息和统计。section 可选,如 server, memory, clients, stats 等。 |
INFO memory (查看内存使用情况) |
PING |
检查服务器是否正在运行,如果服务器正常,将返回 PONG。 |
PING |
ECHO message |
打印给定的消息。 |
ECHO "Hello Redis" |
TIME |
返回当前服务器时间,格式为 Unix 时间戳(微秒级)。 |
TIME |
DBSIZE |
返回当前数据库中的键的数量。 |
DBSIZE |
CONFIG GET parameter |
获取 Redis 配置参数的值。 |
CONFIG GET maxmemory |
CONFIG SET parameter value |
运行时动态地设置 Redis 配置参数(需要持久化才能重启后生效)。 |
CONFIG SET maxmemory 1gb |
CONFIG REWRITE |
将运行时的配置持久化到 redis.conf 文件中。 |
CONFIG REWRITE |
CLIENT LIST |
列出所有与服务器连接的客户端信息。 |
CLIENT LIST |
CLIENT KILL [ip:port] [ID client-id] |
终止指定客户端的连接。 |
CLIENT KILL ID 12345 |
CLIENT PAUSE timeout |
暂时停止处理客户端命令,timeout 为毫秒数。 |
CLIENT PAUSE 1000 |
FLUSHDB [ASYNC] |
删除当前数据库中的所有键。ASYNC 表示异步执行(Redis 4.0+)。 |
FLUSHDB |
FLUSHALL [ASYNC] |
删除所有数据库中的所有键(谨慎使用!)。 |
FLUSHALL |
键值管理
这是 Redis 最核心的操作,用于管理数据库中的键。
| 命令 |
描述 |
示例 |
KEYS pattern |
查找所有符合给定 pattern 的键。生产环境慎用,可能导致阻塞。 |
KEYS user:* |
EXISTS key [key ...] |
检查一个或多个键是否存在。 |
EXISTS mykey anotherkey |
DEL key [key ...] |
删除一个或多个键。 |
DEL mykey anotherkey |
TYPE key |
返回键所存储的值的类型。 |
TYPE mylist (返回 list) |
EXPIRE key seconds |
为键设置过期时间(秒)。 |
EXPIRE mykey 60 (60秒后过期) |
PEXPIRE key milliseconds |
为键设置过期时间(毫秒)。 |
PEXPIRE mykey 60000 |
TTL key |
查询键的剩余生存时间(秒)。 |
TTL mykey (返回 -1 表示永不过期,-2 表示键不存在) |
PTTL key |
查询键的剩余生存时间(毫秒)。 |
PTTL mykey |
EXPIREAT key timestamp |
设置键的过期时间,时间格式为 Unix 时间戳(秒)。 |
EXPIREAT mykey 1672531200 |
PERSIST key |
移除键的过期时间,使其永不过期。 |
PERSIST mykey |
RENAME key newkey |
重命名键。newkey 已存在,则会被覆盖。 |
RENAME oldname newname |
RENAMENX key newkey |
当且仅当 newkey 不存在时,重命名键。 |
RENAMENX oldname newname |
MOVE key db |
将当前数据库中的键移动到指定的数据库 db 中。 |
MOVE mykey 1 (移动到数据库1) |
SCAN cursor [MATCH pattern] [COUNT count] |
迭代数据库中的键。KEYS 的非阻塞替代方案。 |
SCAN 0 MATCH user:* COUNT 100 |
数据结构操作
Redis 支持 5 种主要数据结构,以下是它们的管理命令。
字符串
| 命令 |
描述 |
示例 |
SET key value [EX seconds\|PX milliseconds] [NX\|XX] |
设置键值。EX/PX 设置过期时间,NX 键不存在时才设置,XX 键存在时才设置。 |
SET mykey "hello" EX 10 |
GET key |
获取键的值。 |
GET mykey |
MSET key value [key value ...] |
同时设置一个或多个键值对。 |
MSET k1 v1 k2 v2 |
MGET key [key ...] |
获取一个或多个键的值。 |
MGET k1 k2 |
INCR key |
将键的值加 1(值必须是整数)。 |
INCR mycounter |
DECR key |
将键的值减 1。 |
DECR mycounter |
INCRBY key increment |
将键的值加上指定的整数值。 |
INCRBY mycounter 5 |
DECRBY key decrement |
将键的值减去指定的整数值。 |
DECRBY mycounter 2 |
APPEND key value |
将指定的值追加到键值的末尾。 |
APPEND mykey " world" |
列表
| 命令 |
描述 |
示例 |
LPUSH key value [value ...] |
将一个或多个值插入到列表的头部。 |
LPUSH mylist "world" |
RPUSH key value [value ...] |
将一个或多个值插入到列表的尾部。 |
RPUSH mylist "hello" |
LPOP key |
移除并返回列表的头元素。 |
LPOP mylist |
RPOP key |
移除并返回列表的尾元素。 |
RPOP mylist |
LRANGE key start stop |
获取列表中指定范围内的元素。0 是第一个,-1 是最后一个。 |
LRANGE mylist 0 -1 (获取全部) |
LLEN key |
返回列表的长度。 |
LLEN mylist |
LINDEX key index |
通过索引获取列表中的元素。 |
LINDEX mylist 0 (获取第一个) |
LREM key count value |
从列表中移除前 count 个值为 value 的元素。count>0从头开始,count<0从尾开始,count=0移除所有。 |
LREM mylist 2 "hello" |
哈希
| 命令 |
描述 |
示例 |
HSET key field value |
将哈希表 key 中的字段 field 设置为值 value。 |
HSET user:1000 name "Alice" |
HGET key field |
获取存储在哈希表中指定字段的值。 |
HGET user:1000 name |
HGETALL key |
获取哈表中所有的字段和值。 |
HGETALL user:1000 |
HDEL key field [field ...] |
删除一个或多个哈希表字段。 |
HDEL user:1000 name age |
HEXISTS key field |
检查哈希表中是否存在指定的字段。 |
HEXISTS user:1000 name |
HINCRBY key field increment |
将哈希表中指定字段的整数值加上增量 increment。 |
HINCRBY user:1000 login_count 1 |
HKEYS key |
获取哈希表中所有字段。 |
HKEYS user:1000 |
HVALS key |
获取哈希表中所有值。 |
HVALS user:1000 |
HLEN key |
获取哈希表中字段的数量。 |
HLEN user:1000 |
集合
| 命令 |
描述 |
示例 |
SADD key member [member ...] |
向集合添加一个或多个成员。 |
SADD myset "hello" |
SMEMBERS key |
返回集合中的所有成员。 |
SMEMBERS myset |
SREM key member [member ...] |
移除集合中一个或多个成员。 |
SREM myset "hello" |
SCARD key |
获取集合的成员数。 |
SCARD myset |
SISMEMBER key member |
判断 member 是否是集合的成员。 |
SISMEMBER myset "hello" |
SINTER key [key ...] |
返回给定所有集合的交集。 |
SINTER set1 set2 |
SUNION key [key ...] |
返回给定所有集合的并集。 |
SUNION set1 set2 |
SDIFF key [key ...] |
返回第一个集合与其他所有集合的差集。 |
SDIFF set1 set2 |
有序集合
| 命令 |
描述 |
示例 |
ZADD key score member [score member ...] |
向有序集合添加一个或多个成员,或更新已存在成员的分数。 |
ZADD leaderboard 100 "player1" |
ZRANGE key start stop [WITHSCORES] |
通过索引区间返回有序集合中指定区间的成员,默认按分数从低到高排序。WITHSCORES 可选。 |
ZRANGE leaderboard 0 2 WITHSCORES |
ZREVRANGE key start stop [WITHSCORES] |
与 ZRANGE 相反,按分数从高到低排序。 |
ZREVRANGE leaderboard 0 2 WITHSCORES |
ZRANGEBYSCORE key min max [WITHSCORES] |
返回分数在 min 和 max 之间的所有成员。 |
ZRANGEBYSCORE leaderboard 80 100 |
ZSCORE key member |
返回有序集合中成员的分数。 |
ZSCORE leaderboard "player1" |
ZCARD key |
获取有序集合的成员数。 |
ZCARD leaderboard |
ZREM key member [member ...] |
移除有序集合中的一个或多个成员。 |
ZREM leaderboard "player1" |
ZINCRBY key increment member |
增加成员的分数。 |
ZINCRBY leaderboard 10 "player1" |
持久化
Redis 提供了两种持久化机制,确保数据不丢失。
| 命令 |
描述 |
示例 |
SAVE |
阻塞地执行保存操作,将当前数据集快照保存到磁盘。生产环境慎用,会阻塞所有客户端。 |
SAVE |
BGSAVE |
非阻塞地执行保存操作,Redis 会 fork 一个子进程来执行保存,主进程可以继续处理客户端请求。 |
BGSAVE |
LASTSAVE |
返回最后一次成功执行 SAVE 或 BGSAVE 的时间戳。 |
LASTSAVE |
SHUTDOWN [NOSAVE\|SAVE] |
SHUTDOWN NOSAVE: 不保存数据直接关闭。SHUTDOWN SAVE: 保存数据后关闭。 |
SHUTDOWN SAVE |
高可用与集群
主从复制
| 命令 |
描述 |
示例 |
SLAVEOF host port |
将当前实例设置为指定主服务器的从服务器。 |
SLAVEOF 192.168.1.100 6379 |
SLAVEOF NO ONE |
将当前实例从从服务器提升为主服务器,停止复制。 |
SLAVEOF NO ONE |
哨兵
哨兵模式用于监控主从节点,并在主节点故障时自动进行故障转移。
| 命令 |
描述 |
示例 |
SENTINEL masters |
列出所有被 Sentinel 监控的主服务器及其状态。 |
SENTINEL masters |
SENTINEL master <master-name> |
获取指定主服务器的详细信息。 |
SENTINEL master mymaster |
SENTINEL slaves <master-name> |
列出指定主服务器的所有从服务器。 |
SENTINEL slaves mymaster |
SENTINEL get-master-addr-by-name <master-name> |
返回指定主服务器的地址和端口。 |
SENTINEL get-master-addr-by-name mymaster |
集群
Redis Cluster 提供了分布式、高可用的解决方案。
| 命令 |
描述 |
示例 |
CLUSTER NODES |
列出集群中所有节点的信息(ID, IP, Port, 角色, 状态等)。 |
CLUSTER NODES |
CLUSTER INFO |
返回集群的状态信息。 |
CLUSTER INFO |
CLUSTER MEET ip port |
将一个节点添加到集群中。 |
CLUSTER MEET 192.168.1.101 6379 |
CLUSTER FORGET node-id |
从集群中移除一个节点。 |
CLUSTER FORGET 3c3a0c74aae9b5616d7a891c3f6a7f61234abcde |
CLUSTER REPLICATE node-id |
将当前节点设置为指定节点的从节点。 |
CLUSTER REPLICATE 3c3a0c74aae9b5616d7a891c3f6a7f61234abcde |
CLUSTER KEYSLOT key |
返回键所对应的槽位。 |
CLUSTER KEYSLOT mykey |
CLUSTER SETSLOT slot IMPORTING|MIGRATING node-id |
设置槽的导入/迁移状态。 |
CLUSTER SETSLOT 0 IMPORTING 3c3a... |
CLUSTER SETSLOT slot NODE node-id |
将槽 slot 指派给指定的节点。 |
CLUSTER SETSLOT 0 NODE 3c3a... |
安全与客户端
| 命令 |
描述 |
示例 |
AUTH password |
密码认证。 |
AUTH mypassword |
ACL [LIST\|SETUSER\|DELUSER\...] |
Redis 6.0+ 的访问控制列表命令,用于精细化管理用户权限。 |
ACL SETUSER myuser on >password +@read |
MULTI |
标记一个事务块的开始。 |
MULTI |
EXEC |
执行事务块中的所有命令。 |
EXEC |
DISCARD |
取消事务块,放弃执行事务块中的所有命令。 |
DISCARD |
UNWATCH |
取消 WATCH 命令对所有键的监视。 |
UNWATCH |
WATCH key [key ...] |
监视一个或多个键,如果在事务执行前这些键被其他客户端修改,则事务将失败。 |
WATCH mykey |
发布与订阅
| 命令 |
描述 |
示例 |
PUBLISH channel message |
向指定频道发送消息。 |
PUBLISH news "Hello, world!" |
SUBSCRIBE channel [channel ...] |
订阅一个或多个频道。 |
SUBSCRIBE news |
UNSUBSCRIBE [channel] |
退订一个或多个频道,不填则退订所有。 |
UNSUBSCRIBE news |
PSUBSCRIBE pattern [pattern ...] |
订阅符合给定模式的频道。 |
PSUBSCRIBE news.* |
PUNSUBSCRIBE [pattern] |
退订符合给定模式的频道。 |
PUNSUBSCRIBE news.* |
慢查询
用于排查性能问题,记录执行时间过长的命令。
| 命令 |
描述 |
示例 |
SLOWLOG subcommand [argument] |
管理慢查询日志。subcommand 可为 get, len, reset。 |
SLOWLOG get 5 (获取最慢的5条查询) |
CONFIG SET slowlog-log-slower-than microsecond |
设置执行时间超过多少微秒的命令会被记录到慢查询日志中。 |
CONFIG SET slowlog-log-slower-than 10000 (10毫秒) |
CONFIG SET slowlog-max-len |
设置慢查询日志的最大条目数。 |
CONFIG SET slowlog-max-len 128 |
- 日常运维:
INFO, DBSIZE, CLIENT LIST, CONFIG, FLUSHDB/ALL。
- 键管理:
KEYS (开发测试用), SCAN (生产推荐), EXISTS, TTL, DEL。
- 数据操作:根据数据类型选择
SET/GET, HSET/HGET, LPUSH/LPOP, SADD/SREM, ZADD/ZRANGE。
- 高可用:
SLAVEOF (主从), SENTINEL (哨兵), CLUSTER (集群)。
- 排查问题:
SLOWLOG (性能), MONITOR (实时查看所有命令,慎用)。
掌握这些命令,你就能熟练地管理和操作 Redis 数据库了。