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
去重 UVPFADD / PFCOUNT(估算)或 Set(精确)
缓存旁路读:GET 未命中回源 + SET EX;写:更新库后 DEL

小结

  • 五种基础结构 + Bitmap/HLL/GEO/Stream 覆盖绝大多数场景。
  • 加锁用 SET NX EX,解锁用 Lua;遍历用 SCAN
  • 一切键设过期;INFO/SLOWLOG/--bigkeys 是日常排查入口。
  • Cluster 用 16384 槽,跨槽操作用 hash tag 绑定。