快速索引(按功能)
所有命令均可在
redis-cli中执行。
示例中>表示命令提示符,→表示返回结果。
| 需求 | 命令 |
|---|---|
| 存一个值 | SET, GET |
| 存对象 | HSET, HGETALL |
| 队列 | LPUSH + RPOP 或 RPUSH + LPOP |
| 唯一集合 | SADD, SISMEMBER |
| 排行榜 | ZADD, ZREVRANGE |
| 计数器 | INCR, DECR |
| 分布式锁 | SET NX EX |
| 缓存过期 | EXPIRE, TTL |
| 批量操作 | MSET, MGET |
| 原子操作 | INCR, SETNX, Lua 脚本 |
| 清空当前库 | FLUSHDB(慎用!) |
| 查看所有键 | KEYS *(生产用 SCAN) |
一、键(Key)通用命令
适用于任何数据类型的键。
| 命令 | 功能 | 示例 |
|---|---|---|
DEL key [key ...] | 删除一个或多个键 | > DEL user:1001 book:2001 → (integer) 2 |
EXISTS key | 检查键是否存在 | > EXISTS user:1001 → (integer) 1 |
EXPIRE key seconds | 设置过期时间(秒) | > EXPIRE session:abc 3600 → (integer) 1 |
TTL key | 查看剩余生存时间(秒,-1永久,-2不存在) | > TTL session:abc → (integer) 3598 |
PERSIST key | 移除过期时间,变为永久 | > PERSIST session:abc → (integer) 1 |
TYPE key | 返回键的数据类型 | > TYPE user:1001 → string / hash / list / set / zset |
KEYS pattern | 查找匹配模式的键(生产慎用) | > KEYS book:* → 1) "book:1001" 2) "book:1002" |
SCAN cursor [MATCH pattern] [COUNT count] | 迭代键(替代 KEYS,安全) | > SCAN 0 MATCH book:* COUNT 10 |
RENAME key newkey | 重命名键 | > RENAME user:1001 user:1001_new → OK |
RENAMENX key newkey | 仅当 newkey 不存在时重命名 | > RENAMENX user:1001 user:1002 → (integer) 1 |
二、字符串(String)命令
| 命令 | 功能 | 示例 |
|---|---|---|
SET key value [EX seconds] [PX ms] [NX] [XX] | 设置字符串值 | > SET name "张三" → OK> SET token "abc123" EX 60 → OK(60秒过期)> SET lock "1" NX → OK(仅当不存在时成功) |
GET key | 获取值 | > GET name → "张三" |
MSET key value [key value ...] | 批量设置 | > MSET a 1 b 2 c 3 → OK |
MGET key [key ...] | 批量获取 | > MGET a b → 1) "1" 2) "2" |
INCR key | 整数自增1(原子) | > INCR views → (integer) 1 |
INCRBY key increment | 整数增加指定值 | > INCRBY views 5 → (integer) 6 |
DECR key | 整数自减1 | > DECR stock → (integer) 9 |
DECRBY key decrement | 整数减少指定值 | > DECRBY stock 3 → (integer) 6 |
INCRBYFLOAT key increment | 浮点数增加 | > INCRBYFLOAT price 0.5 → "10.5" |
APPEND key value | 追加字符串 | > APPEND name " 李四" → (integer) 9(新长度) |
STRLEN key | 获取字符串长度 | > STRLEN name → (integer) 9 |
SETEX key seconds value | 设置值并指定过期时间(秒) | > SETEX captcha 60 "1234" → OK |
SETNX key value | 仅当键不存在时设置(分布式锁常用) | > SETNX lock "1" → (integer) 1(成功) |
三、哈希(Hash)命令
| 命令 | 功能 | 示例 |
|---|---|---|
HSET key field value [field value ...] | 设置哈希字段 | > HSET user:1001 name "张三" age 25 → (integer) 2 |
HGET key field | 获取指定字段 | > HGET user:1001 name → "张三" |
HGETALL key | 获取所有字段和值 | > HGETALL user:1001 → 1) "name" 2) "张三" 3) "age" 4) "25" |
HMGET key field [field ...] | 批量获取字段 | > HMGET user:1001 name age → 1) "张三" 2) "25" |
HMSET key field value [field value ...] | 批量设置字段(已废弃,用 HSET 代替) | - |
HDEL key field [field ...] | 删除一个或多个字段 | > HDEL user:1001 age → (integer) 1 |
HEXISTS key field | 检查字段是否存在 | > HEXISTS user:1001 name → (integer) 1 |
HINCRBY key field increment | 整数自增 | > HINCRBY user:1001 age 1 → (integer) 26 |
HINCRBYFLOAT key field increment | 浮点数自增 | > HINCRBYFLOAT product:2001 price 0.8 → "20.8" |
HKEYS key | 获取所有字段名 | > HKEYS user:1001 → 1) "name" |
HVALS key | 获取所有字段值 | > HVALS user:1001 → 1) "张三" |
HLEN key | 获取字段数量 | > HLEN user:1001 → (integer) 1 |
HSCAN key cursor [MATCH pattern] [COUNT count] | 迭代哈希字段 | > HSCAN user:1001 0 |
四、列表(List)命令
| 命令 | 功能 | 示例 |
|---|---|---|
LPUSH key value [value ...] | 从左侧插入一个或多个元素 | > LPUSH queue "task1" "task2" → (integer) 2 |
RPUSH key value [value ...] | 从右侧插入 | > RPUSH queue "task3" → (integer) 3 |
LPOP key [count] | 从左侧弹出一个或多个元素 | > LPOP queue → "task2" |
RPOP key [count] | 从右侧弹出 | > RPOP queue → "task3" |
LRANGE key start stop | 获取指定范围元素(索引从0开始,-1表示最后) | > LRANGE queue 0 -1 → 1) "task1" |
LLEN key | 获取列表长度 | > LLEN queue → (integer) 1 |
LINDEX key index | 获取指定索引的元素 | > LINDEX queue 0 → "task1" |
LSET key index value | 设置指定索引的元素值 | > LSET queue 0 "newtask" → OK |
| `LINSERT key BEFORE | AFTER pivot value` | 在指定元素前后插入 |
LREM key count value | 删除 count 个等于 value 的元素(count>0从左,<0从右,=0全部) | > LREM queue 1 "task1" → (integer) 1 |
LTRIM key start stop | 保留区间内元素,其余删除 | > LTRIM queue 0 0 → OK(只保留第一个) |
RPOPLPUSH source destination | 从源列表右侧弹出,推入目标列表左侧(原子) | > RPOPLPUSH queue backup → "task1.5" |
五、集合(Set)命令
| 命令 | 功能 | 示例 |
|---|---|---|
SADD key member [member ...] | 添加一个或多个成员(自动去重) | > SADD tags "redis" "database" "cache" → (integer) 3 |
SMEMBERS key | 获取所有成员 | > SMEMBERS tags → 1) "cache" 2) "database" 3) "redis" |
SISMEMBER key member | 判断成员是否存在 | > SISMEMBER tags "redis" → (integer) 1 |
SCARD key | 获取成员数量 | > SCARD tags → (integer) 3 |
SREM key member [member ...] | 删除成员 | > SREM tags "cache" → (integer) 1 |
SPOP key [count] | 随机弹出 count 个成员 | > SPOP tags 1 → 1) "database" |
SRANDMEMBER key [count] | 随机返回 count 个成员(不删除) | > SRANDMEMBER tags 2 → 1) "redis" 2) "cache" |
SINTER key [key ...] | 求交集 | > SINTER setA setB |
SUNION key [key ...] | 求并集 | > SUNION setA setB |
SDIFF key [key ...] | 求差集(第一个集合有,后面没有的) | > SDIFF setA setB |
SINTERSTORE destination key [key ...] | 将交集结果存入 destination | > SINTERSTORE common setA setB |
SUNIONSTORE destination key [key ...] | 将并集结果存入 destination | |
SDIFFSTORE destination key [key ...] | 将差集结果存入 destination | |
SMOVE source destination member | 将成员从一个集合移动到另一个 | > SMOVE tags old_tags "redis" → (integer) 1 |
六、有序集合(Sorted Set)命令
| 命令 | 功能 | 示例 |
|---|---|---|
ZADD key score member [score member ...] [NX|XX] [CH] [INCR] | 添加或更新成员及分数 | > ZADD rank 100 "张三" 95 "李四" → (integer) 2 |
ZRANGE key start stop [WITHSCORES] | 按分数升序获取索引范围内的成员 | > ZRANGE rank 0 -1 WITHSCORES → 1) "李四" 2) "95" 3) "张三" 4) "100" |
ZREVRANGE key start stop [WITHSCORES] | 按分数降序获取(排行榜常用) | > ZREVRANGE rank 0 2 WITHSCORES → 前三名 |
ZRANGEBYSCORE key min max [WITHSCORES] [LIMIT offset count] | 按分数范围升序获取 | > ZRANGEBYSCORE rank 90 100 WITHSCORES |
ZREVRANGEBYSCORE key max min [WITHSCORES] | 按分数范围降序获取 | |
ZREM key member [member ...] | 删除成员 | > ZREM rank "李四" → (integer) 1 |
ZINCRBY key increment member | 增加成员分数 | > ZINCRBY rank 5 "张三" → "105" |
ZSCORE key member | 获取成员分数 | > ZSCORE rank "张三" → "105" |
ZCARD key | 获取成员数量 | > ZCARD rank → (integer) 1 |
ZCOUNT key min max | 统计分数在 min-max 之间的成员数 | > ZCOUNT rank 90 100 → (integer) 1 |
ZRANK key member | 获取成员排名(升序,从0开始) | > ZRANK rank "张三" → (integer) 0 |
ZREVRANK key member | 获取成员排名(降序) | > ZREVRANK rank "张三" → (integer) 0 |
ZPOPMIN key [count] | 弹出分数最低的 count 个成员 | > ZPOPMIN rank → 1) "张三" 2) "105" |
ZPOPMAX key [count] | 弹出分数最高的 count 个成员 | |
ZUNIONSTORE destination numkeys key [key ...] [WEIGHTS weight] [AGGREGATE SUM|MIN|MAX] | 计算多个有序集合的并集并存储 | > ZUNIONSTORE total 2 rank1 rank2 WEIGHTS 1 2 |
ZINTERSTORE destination numkeys key [key ...] | 计算交集并存储 |
七、位图(Bitmap)命令
位图本质是字符串,但可操作二进制位。
| 命令 | 功能 | 示例 |
|---|---|---|
SETBIT key offset value | 设置指定偏移量上的位(0或1) | > SETBIT login:2025-01-01 100 1 → (integer) 0 |
GETBIT key offset | 获取指定偏移量上的位 | > GETBIT login:2025-01-01 100 → (integer) 1 |
BITCOUNT key [start end] | 统计值为1的位数 | > BITCOUNT login:2025-01-01 → (integer) 1 |
BITOP operation destkey key [key ...] | 按位运算(AND, OR, XOR, NOT) | > BITOP AND unique user1 user2 |
八、HyperLogLog 命令
用于近似基数统计,固定内存 12KB。
| 命令 | 功能 | 示例 |
|---|---|---|
PFADD key element [element ...] | 添加元素 | > PFADD uv:2025-01-01 "user1" "user2" → (integer) 1 |
PFCOUNT key [key ...] | 获取近似基数 | > PFCOUNT uv:2025-01-01 → (integer) 2 |
PFMERGE destkey sourcekey [sourcekey ...] | 合并多个 HyperLogLog | > PFMERGE total uv:day1 uv:day2 |
九、地理空间(GEO)命令
基于有序集合实现,存储地理位置。
| 命令 | 功能 | 示例 |
|---|---|---|
GEOADD key longitude latitude member [longitude latitude member ...] | 添加地理位置 | > GEOADD cities 116.40 39.90 "北京" 121.48 31.22 "上海" → (integer) 2 |
GEOPOS key member [member ...] | 获取地理位置 | > GEOPOS cities "北京" → 1) "116.399998962..." |
GEODIST key member1 member2 [unit] | 计算两个位置距离(单位 m/km/mi/ft) | > GEODIST cities "北京" "上海" km → "1067.8" |
GEORADIUS key longitude latitude radius unit [WITHCOORD] [WITHDIST] [COUNT count] | 根据圆心查找附近成员 | > GEORADIUS cities 116.40 39.90 100 km WITHDIST |
GEORADIUSBYMEMBER key member radius unit | 根据已有成员查找附近 | > GEORADIUSBYMEMBER cities "北京" 200 km |
十、事务命令
Redis 事务是将多个命令打包,顺序执行,但不支持回滚。
| 命令 | 功能 | 示例 |
|---|---|---|
MULTI | 开启事务 | > MULTI → OK |
命令1 … | 在事务中排队命令 | > SET a 1 → QUEUED> INCR a → QUEUED |
EXEC | 执行事务 | > EXEC → 1) OK 2) (integer) 2 |
DISCARD | 取消事务 | > DISCARD → OK |
WATCH key [key ...] | 监视键,若在 EXEC 前被修改则事务失败 | > WATCH a → OK |
UNWATCH | 取消监视 |
十一、脚本命令(Lua)
| 命令 | 功能 | 示例 |
|---|---|---|
EVAL script numkeys key [key ...] arg [arg ...] | 执行 Lua 脚本 | > EVAL "return redis.call('SET', KEYS[1], ARGV[1])" 1 a 100 → OK |
EVALSHA sha1 numkeys key [key ...] arg [arg ...] | 执行已缓存的脚本(通过 SCRIPT LOAD) | |
SCRIPT LOAD script | 加载脚本到缓存,返回 SHA1 | > SCRIPT LOAD "return redis.call('GET', KEYS[1])" → "sha1..." |
SCRIPT FLUSH | 清空脚本缓存 | > SCRIPT FLUSH → OK |
SCRIPT KILL | 杀死正在运行的脚本(如果没有写操作) |
十二、发布/订阅(Pub/Sub)命令
| 命令 | 功能 | 示例 |
|---|---|---|
PUBLISH channel message | 向频道发送消息 | > PUBLISH news "hello" → (integer) 1(接收者数量) |
SUBSCRIBE channel [channel ...] | 订阅频道 | > SUBSCRIBE news → 进入监听模式 |
PSUBSCRIBE pattern [pattern ...] | 按模式订阅(支持 * 通配符) | > PSUBSCRIBE news.* |
UNSUBSCRIBE [channel ...] | 退订 | |
PUNSUBSCRIBE [pattern ...] | 按模式退订 |
十三、服务器管理命令
| 命令 | 功能 | 示例 |
|---|---|---|
PING | 测试连接 | > PING → PONG |
SELECT index | 切换数据库(0-15) | > SELECT 1 → OK |
FLUSHDB | 清空当前数据库 | > FLUSHDB → OK |
FLUSHALL | 清空所有数据库 | > FLUSHALL → OK |
DBSIZE | 返回当前数据库键数量 | > DBSIZE → (integer) 42 |
INFO [section] | 查看服务器信息(内存、CPU、客户端等) | > INFO memory |
CONFIG GET parameter | 获取配置参数 | > CONFIG GET maxmemory → 1) "maxmemory" 2) "0" |
CONFIG SET parameter value | 动态修改配置(不持久化) | > CONFIG SET maxmemory 256mb → OK |
CLIENT LIST | 查看所有客户端连接 | |
CLIENT KILL addr:port | 断开客户端 | |
MONITOR | 实时打印服务器接收到的命令(调试用) | |
SLOWLOG GET [count] | 获取慢查询日志 | > SLOWLOG GET 10 |