Redis 命令速查表
本页面汇总了 Redis 最常用的命令,方便快速查阅。
键操作
| 命令 | 说明 | 示例 |
|---|---|---|
KEYS pattern | 查找键 | KEYS user:* |
EXISTS key | 检查键是否存在 | EXISTS mykey |
DEL key [key ...] | 删除键 | DEL key1 key2 |
EXPIRE key seconds | 设置过期时间 | EXPIRE mykey 60 |
TTL key | 查看剩余时间 | TTL mykey |
PERSIST key | 移除过期时间 | PERSIST mykey |
RENAME key newkey | 重命名键 | RENAME old new |
TYPE key | 查看键类型 | TYPE mykey |
SCAN cursor [MATCH] [COUNT] | 迭代键 | SCAN 0 MATCH user:* |
字符串操作
| 命令 | 说明 | 示例 |
|---|---|---|
SET key value | 设置值 | SET name "张三" |
GET key | 获取值 | GET name |
SETEX key seconds value | 设置并过期 | SETEX session 3600 "data" |
SETNX key value | 不存在才设置 | SETNX lock true |
MSET key value [key value ...] | 批量设置 | MSET k1 v1 k2 v2 |
MGET key [key ...] | 批量获取 | MGET k1 k2 k3 |
INCR key | 自增1 | INCR counter |
DECR key | 自减1 | DECR counter |
INCRBY key increment | 增加指定值 | INCRBY counter 10 |
APPEND key value | 追加值 | APPEND name "先生" |
STRLEN key | 获取长度 | STRLEN name |
GETRANGE key start end | 获取子串 | GETRANGE name 0 2 |
SETRANGE key offset value | 替换子串 | SETRANGE name 0 "Li" |
哈希操作
| 命令 | 说明 | 示例 |
|---|---|---|
HSET key field value | 设置字段 | HSET user:1 name "张三" |
HGET key field | 获取字段 | HGET user:1 name |
HMSET key field value [field value ...] | 批量设置 | HMSET user:1 name "张三" age 25 |
HMGET key field [field ...] | 批量获取 | HMGET user:1 name age |
HGETALL key | 获取所有 | HGETALL user:1 |
HKEYS key | 获取所有字段 | HKEYS user:1 |
HVALS key | 获取所有值 | HVALS user:1 |
HDEL key field [field ...] | 删除字段 | HDEL user:1 age |
HLEN key | 字段数量 | HLEN user:1 |
HEXISTS key field | 字段是否存在 | HEXISTS user:1 name |
HINCRBY key field increment | 字段增加 | HINCRBY user:1 age 1 |
HSETNX key field value | 不存在才设置 | HSETNX user:1 email "[email protected]" |
列表操作
| 命令 | 说明 | 示例 |
|---|---|---|
LPUSH key value [value ...] | 左侧插入 | LPUSH queue "task1" |
RPUSH key value [value ...] | 右侧插入 | RPUSH queue "task2" |
LPOP key | 左侧弹出 | LPOP queue |
RPOP key | 右侧弹出 | RPOP queue |
BLPOP key [key ...] timeout | 阻塞左侧弹出 | BLPOP queue 0 |
BRPOP key [key ...] timeout | 阻塞右侧弹出 | BRPOP queue 0 |
LRANGE key start stop | 获取范围 | LRANGE queue 0 -1 |
LLEN key | 列表长度 | LLEN queue |
LINDEX key index | 获取指定索引 | LINDEX queue 0 |
LSET key index value | 设置指定索引 | LSET queue 0 "new" |
LREM key count value | 删除元素 | LREM queue 1 "task1" |
LTRIM key start stop | 裁剪列表 | LTRIM queue 0 99 |
RPOPLPUSH source destination | 转移元素 | RPOPLPUSH queue processing |
集合操作
| 命令 | 说明 | 示例 |
|---|---|---|
SADD key member [member ...] | 添加成员 | SADD tags "redis" |
SREM key member [member ...] | 移除成员 | SREM tags "redis" |
SMEMBERS key | 获取所有成员 | SMEMBERS tags |
SISMEMBER key member | 是否成员 | SISMEMBER tags "redis" |
SCARD key | 成员数量 | SCARD tags |
SPOP key [count] | 随机弹出 | SPOP tags 1 |
SRANDMEMBER key [count] | 随机获取 | SRANDMEMBER tags 3 |
SINTER key [key ...] | 交集 | SINTER tags1 tags2 |
SUNION key [key ...] | 并集 | SUNION tags1 tags2 |
SDIFF key [key ...] | 差集 | SDIFF tags1 tags2 |
SINTERSTORE dest key [key ...] | 交集存储 | SINTERSTORE result t1 t2 |
有序集合操作
| 命令 | 说明 | 示例 |
|---|---|---|
ZADD key score member [score member ...] | 添加成员 | ZADD leaderboard 100 "player1" |
ZREM key member [member ...] | 移除成员 | ZREM leaderboard "player1" |
ZRANGE key start stop [WITHSCORES] | 按分数升序 | ZRANGE leaderboard 0 9 WITHSCORES |
ZREVRANGE key start stop [WITHSCORES] | 按分数降序 | ZREVRANGE leaderboard 0 9 |
ZRANGEBYSCORE key min max | 按分数范围 | ZRANGEBYSCORE leaderboard 0 100 |
ZSCORE key member | 获取分数 | ZSCORE leaderboard "player1" |
ZRANK key member | 获取排名(升序) | ZRANK leaderboard "player1" |
ZREVRANK key member | 获取排名(降序) | ZREVRANK leaderboard "player1" |
ZCARD key | 成员数量 | ZCARD leaderboard |
ZCOUNT key min max | 分数范围计数 | ZCOUNT leaderboard 0 100 |
ZINCRBY key increment member | 增加分数 | ZINCRBY leaderboard 10 "player1" |
ZREMRangeBYRANK key start stop | 按排名删除 | ZREMRANGEBYRANK leaderboard 0 9 |
ZREMRangeBYSCORE key min max | 按分数删除 | ZREMRANGEBYSCORE leaderboard 0 50 |
位图操作
| 命令 | 说明 | 示例 |
|---|---|---|
SETBIT key offset value | 设置位 | SETBIT bitmap 100 1 |
GETBIT key offset | 获取位 | GETBIT bitmap 100 |
BITCOUNT key [start end] | 统计1的数量 | BITCOUNT bitmap |
BITPOS key bit [start end] | 查找第一个位 | BITPOS bitmap 1 |
BITOP operation destkey key [key ...] | 位运算 | BITOP AND result b1 b2 |
HyperLogLog 操作
| 命令 | 说明 | 示例 |
|---|---|---|
PFADD key element [element ...] | 添加元素 | PFADD visitors "ip1" |
PFCOUNT key [key ...] | 估算基数 | PFCOUNT visitors |
PFMERGE destkey sourcekey [sourcekey ...] | 合并 | PFMERGE result h1 h2 |
地理空间操作
| 命令 | 说明 | 示例 |
|---|---|---|
GEOADD key longitude latitude member | 添加位置 | GEOADD cities 116.4 39.9 "北京" |
GEOPOS key member [member ...] | 获取位置 | GEOPOS cities "北京" |
GEODIST key member1 member2 [unit] | 计算距离 | GEODIST cities "北京" "上海" km |
GEORADIUS key lon lat radius unit | 范围查询 | GEORADIUS cities 116.4 39.9 100 km |
GEORADIUSBYMEMBER key member radius unit | 按成员查询 | GEORADIUSBYMEMBER cities "北京" 100 km |
GEOHASH key member [member ...] | 获取哈希 | GEOHASH cities "北京" |
事务操作
| 命令 | 说明 |
|---|---|
MULTI | 开始事务 |
EXEC | 执行事务 |
DISCARD | 取消事务 |
WATCH key [key ...] | 监视键 |
UNWATCH | 取消监视 |
# 事务示例
MULTI
SET balance 100
DECRBY balance 20
EXEC
发布订阅
| 命令 | 说明 | 示例 |
|---|---|---|
PUBLISH channel message | 发布消息 | PUBLISH news "hello" |
SUBSCRIBE channel [channel ...] | 订阅频道 | SUBSCRIBE news |
UNSUBSCRIBE [channel ...] | 取消订阅 | UNSUBSCRIBE news |
PSUBSCRIBE pattern [pattern ...] | 模式订阅 | PSUBSCRIBE news.* |
PUNSUBSCRIBE [pattern ...] | 取消模式订阅 | PUNSUBSCRIBE news.* |
持久化命令
| 命令 | 说明 |
|---|---|
SAVE | 同步保存 |
BGSAVE | 后台保存 |
BGREWRITEAOF | 重写 AOF |
LASTSAVE | 上次保存时间 |
INFO persistence | 持久化信息 |
服务器管理
| 命令 | 说明 | 示例 |
|---|---|---|
INFO [section] | 服务器信息 | INFO memory |
CONFIG GET parameter | 获取配置 | CONFIG GET maxmemory |
CONFIG SET parameter value | 设置配置 | CONFIG SET maxmemory 1gb |
CONFIG REWRITE | 重写配置文件 | - |
MONITOR | 实时监控 | - |
SLOWLOG subcommand | 慢查询日志 | SLOWLOG GET 10 |
CLIENT LIST | 客户端列表 | - |
CLIENT KILL ip:port | 关闭客户端 | - |
FLUSHDB | 清空当前库 | - |
FLUSHALL | 清空所有库 | - |
DBSIZE | 键数量 | - |
SELECT index | 选择数据库 | SELECT 1 |
AUTH password | 认证 | AUTH mypassword |
PING | 测试连接 | - |
ECHO message | 回显 | ECHO "hello" |
TIME | 服务器时间 | - |
内存管理
| 命令 | 说明 | 示例 |
|---|---|---|
MEMORY DOCTOR | 内存诊断 | - |
MEMORY USAGE key | 键内存使用 | MEMORY USAGE mykey |
MEMORY STATS | 内存统计 | - |
MEMORY PURGE | 释放内存 | - |
集群命令
| 命令 | 说明 |
|---|---|
CLUSTER INFO | 集群信息 |
CLUSTER NODES | 节点列表 |
CLUSTER SLOTS | 槽位信息 |
CLUSTER MEET ip port | 添加节点 |
CLUSTER REPLICATE node-id | 复制节点 |
CLUSTER FAILOVER | 故障转移 |
CLUSTER ADDSLOTS slot [slot ...] | 分配槽位 |
常用应用场景
缓存模式
# 设置缓存(1小时过期)
SET user:1001 "{\"name\":\"张三\",\"age\":25}" EX 3600
# 获取缓存
GET user:1001
# 更新缓存
SET user:1001 "{\"name\":\"张三\",\"age\":26}" EX 3600
# 删除缓存
DEL user:1001
计数器
# 页面访问计数
INCR page:view:home
# 增加指定值
INCRBY user:1001:score 10
# 获取当前值
GET page:view:home
分布式锁
# 加锁
SET lock:resource "unique_value" NX EX 30
# 解锁(使用 Lua 脚本确保原子性)
EVAL "if redis.call('get', KEYS[1]) == ARGV[1] then return redis.call('del', KEYS[1]) else return 0 end" 1 lock:resource unique_value
限流器
# 滑动窗口限流
ZADD rate_limit:user:1001 <current_timestamp> <unique_id>
ZREMRANGEBYSCORE rate_limit:user:1001 0 <timestamp_1_min_ago>
ZCARD rate_limit:user:1001
EXPIRE rate_limit:user:1001 60
排行榜
# 添加分数
ZADD leaderboard 1000 "player1"
ZADD leaderboard 1500 "player2"
ZADD leaderboard 800 "player3"
# 获取前10名
ZREVRANGE leaderboard 0 9 WITHSCORES
# 获取玩家排名
ZREVRANK leaderboard "player1"
# 获取玩家分数
ZSCORE leaderboard "player1"
消息队列
# 生产者
LPUSH queue:tasks "{\"id\":1,\"task\":\"send_email\"}"
LPUSH queue:tasks "{\"id\":2,\"task\":\"process_image\"}"
# 消费者(阻塞弹出)
BRPOP queue:tasks 0
会话存储
# 创建会话
HSET session:abc123 user_id 1001 login_time 1234567890
EXPIRE session:abc123 3600
# 获取会话
HGETALL session:abc123
# 更新过期时间
EXPIRE session:abc123 3600
购物车
# 添加商品
HSET cart:user:1001 product:2001 2
HSET cart:user:1001 product:2002 1
# 修改数量
HINCRBY cart:user:1001 product:2001 1
# 删除商品
HDEL cart:user:1001 product:2001
# 获取购物车
HGETALL cart:user:1001
# 清空购物车
DEL cart:user:1001
性能优化建议
- 使用管道(Pipeline):批量执行命令减少网络往返
- 选择合适的数据结构:根据场景选择最优数据结构
- 设置合理的过期时间:避免内存无限增长
- 使用哈希存储对象:比 JSON 字符串更节省内存
- 控制键名长度:过长的键名会增加内存开销
- 避免大键:单个键值不宜过大(建议 < 1MB)
- 使用连接池:复用连接减少开销
- 启用压缩:对大型值启用压缩
Stream 操作
| 命令 | 说明 | 示例 |
|---|---|---|
XADD key * field value | 添加消息 | XADD mystream * name "张三" |
XLEN key | 获取消息数量 | XLEN mystream |
XRANGE key - + | 获取所有消息 | XRANGE mystream - + |
XREVRANGE key + - | 反向获取消息 | XREVRANGE mystream + - COUNT 10 |
XREAD STREAMS key $ | 读取新消息 | XREAD BLOCK 5000 STREAMS mystream $ |
XDEL key ID | 删除消息 | XDEL mystream 1692632086370-0 |
XTRIM key MAXLEN count | 修剪 Stream | XTRIM mystream MAXLEN 1000 |
XGROUP CREATE key group $ | 创建消费者组 | XGROUP CREATE mystream mygroup $ |
XREADGROUP GROUP group consumer STREAMS key > | 消费消息 | XREADGROUP GROUP mygroup worker1 STREAMS mystream > |
XACK key group ID | 确认消息 | XACK mystream mygroup 1692632086370-0 |
XPENDING key group | 查看待处理消息 | XPENDING mystream mygroup |
XCLAIM key group consumer time ID | 转移消息 | XCLAIM mystream mygroup worker2 60000 1692632086370-0 |
XINFO STREAM key | 查看 Stream 信息 | XINFO STREAM mystream |
# 消息队列示例
# 生产者
XADD task_queue * type "email" data '{"to":"[email protected]"}'
# 消费者
XREADGROUP GROUP workers consumer1 STREAMS task_queue >
XACK task_queue workers 1692632086370-0
Vector Sets 操作(Redis 8.0+)
| 命令 | 说明 | 示例 |
|---|---|---|
VADD key vector element | 添加向量 | VADD myset "1.0,2.0,3.0" item1 |
VSIM key vector | 相似性搜索 | VSIM myset "1.1,2.1,3.1" WITHSCORES COUNT 10 |
VEMB key element | 获取向量 | VEMB myset item1 |
VCARD key | 获取元素数量 | VCARD myset |
VDIM key | 获取向量维度 | VDIM myset |
VREM key element | 删除元素 | VREM myset item1 |
VSETATTR key element json | 设置属性 | VSETATTR myset item1 '{"category":"tech"}' |
VGETATTR key element | 获取属性 | VGETATTR myset item1 |
VINFO key | 获取详细信息 | VINFO myset |
# 向量搜索示例
VADD products "0.5,0.3,0.8" prod_001 SETATTR '{"name":"Redis实战","price":89}'
VSIM products "0.6,0.4,0.7" WITHSCORES COUNT 5 FILTER ".price < 100"
Hash 字段过期操作(Redis 7.4+)
| 命令 | 说明 | 示例 |
|---|---|---|
HEXPIRE key seconds FIELDS n field | 设置字段 TTL(秒) | HEXPIRE user:1 60 FIELDS 1 session |
HPEXPIRE key ms FIELDS n field | 设置字段 TTL(毫秒) | HPEXPIRE user:1 5000 FIELDS 1 token |
HTTL key FIELDS n field | 获取字段剩余 TTL(秒) | HTTL user:1 FIELDS 1 session |
HPTTL key FIELDS n field | 获取字段剩余 TTL(毫秒) | HPTTL user:1 FIELDS 1 token |
HPERSIST key FIELDS n field | 移除字段过期时间 | HPERSIST user:1 FIELDS 1 session |
# Hash 字段过期示例
HSET user:1001 name "张三" session "abc123"
HEXPIRE user:1001 1800 FIELDS 1 session # session 30分钟后过期
HTTL user:1001 FIELDS 1 session # 查看剩余时间
Hash 字段高级操作(Redis 8.0+)
| 命令 | 说明 | 示例 |
|---|---|---|
HGETEX key [EX seconds] FIELDS n field | 获取字段并设置过期 | HGETEX cache EX 60 FIELDS 1 key |
HSETEX key [EX seconds] FIELDS n field value | 设置字段并设置过期 | HSETEX cache EX 300 FIELDS 1 key value |
HGETDEL key FIELDS n field | 获取并删除字段 | HGETDEL tokens FIELDS 1 one_time_key |
# 滑动过期缓存(每次读取自动续期)
HGETEX session:user1 EX 1800 FIELDS 1 data
# 一次性令牌消费
HSET tokens:verify "abc123" "user_data"
HGETDEL tokens:verify FIELDS 1 "abc123" # 获取后自动删除