#Redis 速查
#String
SET k v GET k
SET k v EX 3600 SET k v NX EX 10 # 加锁原语
SETNX k v MSET k1 v1 k2 v2 MGET k1 k2
INCR k INCRBY k 10 DECRBY k 5
APPEND k "x" STRLEN k GETSET k 0#Hash
HSET user:1 name Alice age 30
HGET user:1 name HMGET user:1 name age
HGETALL user:1 HKEYS user:1 HVALS user:1
HINCRBY user:1 age 1 HDEL user:1 age HLEN user:1
HEXISTS user:1 name#List
LPUSH q a b c RPUSH q d
LPOP q RPOP q
LRANGE q 0 -1 LLEN q
LTRIM q 0 99
RPOPLPUSH src dst LMOVE src dst LEFT RIGHT
BLPOP q 5 # 阻塞弹出(消费者)#Set
SADD tags go redis db SREM tags db
SMEMBERS tags SISMEMBER tags go SCARD tags
SINTER s1 s2 SUNION s1 s2 SDIFF s1 s2
SRANDMEMBER tags 1 SPOP tags 1
SMOVE src dst member#ZSet
ZADD rank 100 alice 90 bob
ZINCRBY rank 5 bob
ZREVRANGE rank 0 9 WITHSCORES
ZRANGEBYSCORE rank 80 100 [WITHSCORES]
ZRANK rank bob ZREVRANK rank bob ZSCORE rank bob
ZCARD rank ZREM rank bob
ZRANGEBYSCORE delayed 0 <now> LIMIT 0 10 # 延时队列#高级结构
# Bitmap
SETBIT sign:1001 3 1 BITCOUNT sign:1001 BITOP AND dest a b
# HyperLogLog(基数估算,误差 ~0.81%)
PFADD uv:20260101 u1 u2 PFCOUNT uv:20260101 PFMERGE uv dst src
# GEO
GEOADD shops 116.40 39.90 shop1
GEOSEARCH shops FROMMEMBER shop1 BYRADIUS 5 km ASC
GEODIST shops shop1 shop2 km
# Stream
XADD stream * field value
XREAD COUNT 10 STREAMS stream 0
XGROUP CREATE stream g1 0
XREADGROUP GROUP g1 c1 COUNT 10 STREAMS stream >
XACK stream g1 <id>
XPENDING stream g1#键与过期
EXPIRE k 60 TTL k PERSIST k TYPE k
EXISTS k DEL k UNLINK k RENAME a b
SCAN 0 MATCH user:* COUNT 100 # 替代 KEYS
DBSIZE#事务、脚本与发布订阅
MULTI / EXEC / DISCARD / WATCH
EVAL "return redis.call('GET', KEYS[1])" 1 k
SCRIPT LOAD "..." EVALSHA <sha> 1 k
PUBLISH ch "msg" SUBSCRIBE ch PSUBSCRIBE ch.*#持久化与信息
BGSAVE SAVE LASTSAVE
BGREWRITEAOF
CONFIG SET appendonly yes
INFO INFO memory INFO replication
MONITOR SLOWLOG GET 10 CLIENT LIST
DBSIZE --bigkeys (CLI) --latency (CLI)#主从 / 哨兵 / 集群
REPLICAOF 10.0.0.1 6379 REPLICAOF NO ONE
INFO replication
# Sentinel
redis-cli -p 26379 SENTINEL masters
SENTINEL failover mymaster
# Cluster
CLUSTER INFO CLUSTER NODES
CLUSTER KEYSLOT k CLUSTER COUNTKEYSINSLOT <slot>
redis-cli --cluster check 10.0.0.1:6379#常用模式
| 模式 | 命令组合 |
|---|---|
| 分布式锁 | SET k token NX EX ttl + Lua 原子解锁 |
| 计数限流 | INCR + EXPIRE,或令牌桶 Lua |
| 排行榜 | ZADD + ZREVRANGE |
| 延时队列 | ZADD(score=时间戳) + ZRANGEBYSCORE |
| 去重 UV | PFADD / PFCOUNT(估算)或 Set(精确) |
| 缓存旁路 | 读:GET 未命中回源 + SET EX;写:更新库后 DEL |
#小结
- 五种基础结构 + Bitmap/HLL/GEO/Stream 覆盖绝大多数场景。
- 加锁用
SET NX EX,解锁用 Lua;遍历用SCAN。 - 一切键设过期;
INFO/SLOWLOG/--bigkeys是日常排查入口。 - Cluster 用 16384 槽,跨槽操作用 hash tag 绑定。