连接
CLI
redis-cli redis-cli -h 127.0.0.1 -p 6379 redis-cli -a password -n 2 redis-cli --tls -u rediss://user:pass@host:6380
驱动连接(Python)
import redis r = redis.Redis(host='localhost', port=6379, db=0) r.set('key', 'value') print(r.get('key'))
服务器信息
PING -- returns PONG INFO server -- server details INFO memory -- memory usage DBSIZE -- number of keys in current db
字符串
基本操作
SET name "Alice" GET name SET counter 100 MSET a 1 b 2 c 3 MGET a b c
数值操作
INCR counter -- 101 INCRBY counter 10 -- 111 DECR counter -- 110 DECRBY counter 5 -- 105 INCRBYFLOAT price 2.5
字符串命令
SET key val设置字符串值
GET key获取字符串值
SETNX key val仅当 key 不存在时设置
SETEX key sec val设置值并指定过期秒数
APPEND key val追加到已有值
STRLEN key字符串值的长度
列表
列表操作
LPUSH queue "first" RPUSH queue "last" LRANGE queue 0 -1 -- all elements LPOP queue RPOP queue
列表命令
LPUSH / RPUSH从左 / 右插入元素
LPOP / RPOP从左 / 右弹出元素
LRANGE key start stop获取指定范围的元素
LLEN key列表长度
LINDEX key idx获取指定索引的元素
LREM key count val删除 count 个值为 val 的元素
BLPOP key timeout阻塞弹出(适用于队列)
集合与有序集合
集合操作
SADD tags "python" "redis" "docker" SMEMBERS tags SISMEMBER tags "python" -- 1 (true) SREM tags "docker" SCARD tags -- count
集合运算
SUNION set1 set2 -- union SINTER set1 set2 -- intersection SDIFF set1 set2 -- difference
有序集合操作
ZADD leaderboard 100 "Alice" 85 "Bob" ZRANGE leaderboard 0 -1 WITHSCORES ZREVRANGE leaderboard 0 2 ZSCORE leaderboard "Alice" ZRANK leaderboard "Alice" -- 0-based rank
有序集合命令
ZADD key score member添加带分数的成员
ZRANGE key start stop按排名从低到高获取范围
ZREVRANGE key start stop按排名从高到低获取范围
ZINCRBY key incr member增加成员分数
ZRANGEBYSCORE key min max按分数范围获取成员
ZCARD key成员数量
Hash
Hash 操作
HSET user:1 name "Alice" age 30 HGET user:1 name HGETALL user:1 HMSET user:2 name "Bob" age 25 HMGET user:1 name age
Hash 命令
HSET key field val设置 Hash 字段
HGET key field获取 Hash 字段
HGETALL key获取所有字段和值
HDEL key field删除 Hash 字段
HEXISTS key field检查字段是否存在
HINCRBY key field n对字段值加 n
HKEYS key所有字段名
HLEN key字段数量
Key 与过期
Key 命令
KEYS pattern按模式查找 key(速度慢)
SCAN cursor MATCH pat增量迭代 key(安全)
EXISTS key检查 key 是否存在
DEL key删除 key
TYPE key获取 key 的数据类型
RENAME key newkey重命名 key
过期命令
EXPIRE key 3600 -- expire in 1 hour PEXPIRE key 5000 -- expire in 5000 ms TTL key -- seconds until expiry PTTL key -- ms until expiry PERSIST key -- remove expiry
Key 模式
SET session:abc123 "data" EX 1800 -- EX = seconds, PX = milliseconds -- NX = only if not exists -- XX = only if exists SET lock:order42 "owner" NX EX 10
Pub/Sub
基本 Pub/Sub
-- Subscriber (terminal 1) SUBSCRIBE news alerts -- Publisher (terminal 2) PUBLISH news "Breaking: Redis 8 released"
模式订阅
PSUBSCRIBE news.* -- matches news.tech, news.sports, etc.
Pub/Sub 命令
SUBSCRIBE channel监听频道消息
PUBLISH channel msg向频道发布消息
PSUBSCRIBE pattern按模式订阅
UNSUBSCRIBE channel取消订阅
PUBSUB CHANNELS列出活跃频道
事务
MULTI / EXEC
MULTI SET balance:1 900 SET balance:2 1100 EXEC -- executes atomically
乐观锁
WATCH balance:1 val = GET balance:1 -- read current MULTI SET balance:1 (val - 100) EXEC -- EXEC returns nil if balance:1 changed
事务命令
MULTI开启事务块
EXEC执行队列中的命令
DISCARD丢弃队列中的命令
WATCH key监视 key 的变化(乐观锁)
UNWATCH取消所有 WATCH
持久化
RDB 快照
SAVE -- synchronous snapshot BGSAVE -- background snapshot LASTSAVE -- timestamp of last save
AOF(追加只写文件)
appendonly yes在 redis.conf 中启用 AOF
appendfsync always每次写入都同步(最安全,最慢)
appendfsync everysec每秒同步一次(推荐)
appendfsync no由 OS 决定(最快,风险最高)
持久化命令
CONFIG GET save CONFIG SET save "900 1 300 10" -- snapshot if 1 change in 900s or 10 in 300s BGREWRITEAOF -- rewrite AOF in background
常用模式
分布式锁
SET lock:resource "owner-id" NX EX 30 -- NX = acquire only if not held -- EX 30 = auto-release after 30s DEL lock:resource -- explicit release
限流器
key = "rate:user:42" INCR key EXPIRE key 60 -- 60-second window -- reject if GET key > max_requests
缓存模式
val = GET "cache:user:1" if val is nil: val = fetch_from_db(1) SET "cache:user:1" val EX 300
Session 存储
HSET sess:abc uid 42 role "admin" EXPIRE sess:abc 1800 -- 30 min TTL HGETALL sess:abc