一、通用命令(全局操作)
| 命令 | 语法 | 功能描述 | 时间复杂度 | 示例 |
|---|
| KEYS | KEYS pattern | 匹配所有符合样式的键(支持 * ? [] 等通配符) | O(N) | KEYS user:*(匹配所有用户相关键)KEYS a??(匹配长度为 3、以 a 开头的键) |
| EXISTS | EXISTS key [key...] | 判断键是否存在,返回存在的键数量 | O(1) | EXISTS user:1001(返回 1 表示存在,0 表示不存在)EXISTS key1 key2(返回 2 表示两个键都存在) |
| DEL | DEL key [key...] | 删除指定键,返回删除成功的数量 | O(1) | DEL user:1001(删除单个键)DEL key1 key2(批量删除键) |
| EXPIRE | EXPIRE key seconds | 为键设置秒级过期时间 | O(1) | EXPIRE user:1001 3600(1 小时后过期) |
| PEXPIRE | PEXPIRE key milliseconds | 为键设置毫秒级过期时间 | O(1) | PEXPIRE user:1001 1000(1 秒后过期) |
| TTL | TTL key | 查看键的剩余过期时间(秒级),-1 表示永不过期,-2 表示键不存在 | O(1) | TTL user:1001(返回 3500 表示剩余 3500 秒) |
| PTTL | PTTL key | 查看键的剩余过期时间(毫秒级) | O(1) | PTTL user:1001(返回 3500000 表示剩余 3500 秒) |
| TYPE | TYPE key | 返回键对应的数据类型(string/list/hash/set/zset) | O(1) | TYPE user:1001(返回 "hash" 表示该键是哈希类型) |
| SCAN | SCAN cursor [MATCH pattern] [COUNT count] | 渐进式遍历键,避免阻塞 Redis(替代 KEYS) | O(1) | SCAN 0 MATCH user:* COUNT 10(从游标 0 开始,匹配用户键,每次返回 10 个) |
二、字符串(String)
Redis 最基础的类型,可存储文本、数字、二进制数据(最大 512MB)。
| 命令 | 语法 | 功能描述 | 时间复杂度 | 示例 |
|---|
| SET | SET key value [EX seconds|PX ms] [NX|XX] | 设置键值,支持过期时间和条件(NX:键不存在才设置,XX:键存在才设置) | O(1) | SET user:name "Alice"(基础设置)SET user:name "Bob" EX 3600 NX(1 小时过期,键不存在才设置) |
| GET | GET key | 获取键对应的值,键不存在返回 nil | O(1) | GET user:name(返回 "Alice") |
| MSET | MSET key1 value1 key2 value2... | 批量设置键值 | O (N)(N 为键数量) | MSET user:1001:name "Alice" user:1001:age 25 |
| MGET | MGET key1 key2... | 批量获取键值 | O(N) | MGET user:1001:name user:1001:age(返回 ["Alice", "25"]) |
| INCR | INCR key | 键值为数字时,自增 1(原子操作) | O(1) | INCR article:1001:view(文章阅读量 +1) |
| DECR | DECR key | 键值为数字时,自减 1 | O(1) | DECR stock:iphone(库存 -1) |
| INCRBY | INCRBY key increment | 键值为数字时,自增指定值 | O(1) | INCRBY user:1001:score 10(用户分数 +10) |
| DECRBY | DECRBY key decrement | 键值为数字时,自减指定值 | O(1) | DECRBY stock:iphone 5(库存 -5) |
| APPEND | APPEND key value | 追加字符串到现有值末尾,键不存在则创建 | O (1)(追加短字符串时) | APPEND user:desc "喜欢旅行"(在用户描述后追加文本) |
| STRLEN | STRLEN key | 获取字符串长度 | O(1) | STRLEN user:name(返回 5 表示 "Alice" 长度为 5) |
三、哈希(Hash)
适合存储对象(如用户信息、商品详情),键值对的 “嵌套结构”(field-value 映射)。
| 命令 | 语法 | 功能描述 | 时间复杂度 | 示例 |
|---|
| HSET | HSET key field value [field value...] | 设置哈希的字段值,批量设置多个字段 | O (1)(单个字段)/ O (N)(多个字段) | HSET user:1001 name "Alice" age 25(设置用户姓名和年龄) |
| HGET | HGET key field | 获取哈希指定字段的值 | O(1) | HGET user:1001 name(返回 "Alice") |
| HMSET | HMSET key field1 value1 field2 value2... | 批量设置哈希字段(同 HSET 批量模式) | O(N) | HMSET user:1001 city "Beijing" gender "female" |
| HMGET | HMGET key field1 field2... | 批量获取哈希字段值 | O(N) | HMGET user:1001 name age city(返回 ["Alice", "25", "Beijing"]) |
| HGETALL | HGETALL key | 获取哈希所有字段和值(大哈希慎用,可能阻塞) | O (N)(N 为字段数) | HGETALL user:1001(返回所有用户信息字段) |
| HEXISTS | HEXISTS key field | 判断哈希字段是否存在 | O(1) | HEXISTS user:1001 email(返回 0 表示 email 字段不存在) |
| HDEL | HDEL key field [field...] | 删除哈希指定字段 | O (1)(单个字段)/ O (N)(多个字段) | HDEL user:1001 age(删除用户年龄字段) |
| HKEYS | HKEYS key | 获取哈希所有字段名 | O(N) | HKEYS user:1001(返回 ["name", "age", "city"]) |
| HVALS | HVALS key | 获取哈希所有字段值 | O(N) | HVALS user:1001(返回 ["Alice", "25", "Beijing"]) |
| HLEN | HLEN key | 获取哈希字段数量 | O(1) | HLEN user:1001(返回 3 表示有 3 个字段) |
四、列表(List)
有序、可重复的字符串集合,支持两端插入 / 弹出,适合实现队列、栈、时间轴。
| 命令 | 语法 | 功能描述 | 时间复杂度 | 示例 |
|---|
| LPUSH | LPUSH key element [element...] | 从列表左侧(头部)插入元素 | O (1)(单个元素)/ O (N)(多个元素) | LPUSH user:1001:msgs "msg1" "msg2"(消息从头部插入) |
| RPUSH | RPUSH key element [element...] | 从列表右侧(尾部)插入元素 | O (1)(单个元素)/ O (N)(多个元素) | RPUSH user:1001:msgs "msg3"(消息从尾部插入) |
| LPOP | LPOP key | 从列表左侧弹出元素(删除并返回) | O(1) | LPOP user:1001:msgs(返回 "msg2",列表移除该元素) |
| RPOP | RPOP key | 从列表右侧弹出元素 | O(1) | RPOP user:1001:msgs(返回 "msg3") |
| LRANGE | LRANGE key start stop | 获取列表指定范围元素(0 开头,-1 表示最后一个元素) | O (N)(N 为元素数量) | LRANGE user:1001:msgs 0 -1(返回所有消息)LRANGE user:1001:msgs 0 1(返回前 2 条消息) |
| LLEN | LLEN key | 获取列表长度 | O(1) | LLEN user:1001:msgs(返回 3 表示有 3 条消息) |
| LINDEX | LINDEX key index | 获取列表指定索引的元素 | O(N) | LINDEX user:1001:msgs 1(返回索引 1 对应的元素) |
| BLPOP | BLPOP key [key...] timeout | 阻塞式从左侧弹出元素(列表为空时阻塞,超时后返回 nil) | O(1) | BLPOP user:1001:msgs 10(10 秒内无元素则返回 nil) |
| BRPOP | BRPOP key [key...] timeout | 阻塞式从右侧弹出元素 | O(1) | BRPOP user:1001:msgs 10 |
五、集合(Set)
无序、不可重复的字符串集合,支持交集、并集、差集运算,适合标签、好友关系。
| 命令 | 语法 | 功能描述 | 时间复杂度 | 示例 |
|---|
| SADD | SADD key member [member...] | 向集合添加元素(重复元素会忽略) | O (1)(单个元素)/ O (N)(多个元素) | SADD user:1001:tags "travel" "reading"(给用户添加标签) |
| SMEMBERS | SMEMBERS key | 获取集合所有元素 | O(N) | SMEMBERS user:1001:tags(返回 ["travel", "reading"]) |
| SISMEMBER | SISMEMBER key member | 判断元素是否在集合中 | O(1) | SISMEMBER user:1001:tags "sports"(返回 0 表示不在集合中) |
| SREM | SREM key member [member...] | 从集合删除元素 | O (1)(单个元素)/ O (N)(多个元素) | SREM user:1001:tags "reading"(删除用户标签) |
| SCARD | SCARD key | 获取集合元素数量 | O(1) | SCARD user:1001:tags(返回 1 表示剩余 1 个标签) |
| SINTER | SINTER key1 key2 [key...] | 计算多个集合的交集(共同元素) | O (N*M)(N 为最小集合大小) | SINTER user:1001:tags user:1002:tags(获取两个用户的共同标签) |
| SUNION | SUNION key1 key2 [key...] | 计算多个集合的并集(所有元素去重) | O (N)(N 为总元素数) | SUNION user:1001:tags user:1002:tags(合并两个用户的标签) |
| SDIFF | SDIFF key1 key2 [key...] | 计算集合的差集(key1 有、其他集合没有的元素) | O(N) | SDIFF user:1001:tags user:1002:tags(用户 1 独有的标签) |
| SPOP | SPOP key [count] | 随机删除并返回集合元素 | O (N)(N 为 count 数量) | SPOP user:1001:tags 1(随机删除 1 个标签) |
六、有序集合(ZSet)
有序、不可重复的字符串集合,每个元素关联一个 “分数(score)”,按分数排序,适合排行榜、优先级队列。
| 命令 | 语法 | 功能描述 | 时间复杂度 | 示例 |
|---|
| ZADD | ZADD key score member [score member...] | 向有序集合添加元素(按 score 排序) | O (logN)(N 为元素数) | ZADD rank:article 100 "article:1001" 200 "article:1002"(添加文章及阅读量分数) |
| ZRANGE | ZRANGE key start stop [WITHSCORES] | 按 score 升序获取指定范围元素(WITHSCORES 显示分数) | O (logN + M)(M 为返回元素数) | ZRANGE rank:article 0 -1 WITHSCORES(升序显示所有文章及分数) |
| ZREVRANGE | ZREVRANGE key start stop [WITHSCORES] | 按 score 降序获取指定范围元素(适合排行榜) | O(logN + M) | ZREVRANGE rank:article 0 9 WITHSCORES(显示 Top 10 文章) |
| ZSCORE | ZSCORE key member | 获取元素对应的 score | O(logN) | ZSCORE rank:article "article:1001"(返回 100) |
| ZINCRBY | ZINCRBY key increment member | 元素 score 自增指定值 | O(logN) | ZINCRBY rank:article 10 "article:1001"(文章阅读量 +10) |
| ZREM | ZREM key member [member...] | 从有序集合删除元素 | O (logN)(单个元素)/ O (N*logN)(多个元素) | ZREM rank:article "article:1001"(删除文章排名) |
| ZCOUNT | ZCOUNT key min max | 统计 score 在 [min, max] 范围内的元素数量 | O(logN) | ZCOUNT rank:article 100 200(统计分数 100~200 的文章数) |
| ZRANK | ZRANK key member | 按 score 升序获取元素排名(从 0 开始) | O(logN) | ZRANK rank:article "article:1001"(返回 0 表示排名第一) |
| ZREVRANK | ZREVRANK key member | 按 score 降序获取元素排名 | O(logN) | ZREVRANK rank:article "article:1001"(返回 1 表示降序排名第二) |