redis
Compare original and translation side by side
🇺🇸
Original
English🇨🇳
Translation
ChineseRedis 数据库管理
Redis 数据库管理
概述
概述
Redis 命令、持久化、集群配置等技能。
Redis 命令、持久化、集群配置等技能。
连接管理
连接管理
bash
undefinedbash
undefined本地连接
本地连接
redis-cli
redis-cli
远程连接
远程连接
redis-cli -h hostname -p 6379
redis-cli -h hostname -p 6379 -a password
redis-cli -h hostname -p 6379
redis-cli -h hostname -p 6379 -a password
连接并选择数据库
连接并选择数据库
redis-cli -n 1
redis-cli -n 1
执行单条命令
执行单条命令
redis-cli ping
redis-cli get key
redis-cli ping
redis-cli get key
集群连接
集群连接
redis-cli -c -h hostname -p 6379
undefinedredis-cli -c -h hostname -p 6379
undefined基础命令
基础命令
键操作
键操作
bash
undefinedbash
undefined查看键
查看键
KEYS * # 所有键(生产慎用)
KEYS user:* # 匹配模式
SCAN 0 MATCH user:* COUNT 100 # 安全遍历
KEYS * # 所有键(生产慎用)
KEYS user:* # 匹配模式
SCAN 0 MATCH user:* COUNT 100 # 安全遍历
键信息
键信息
EXISTS key
TYPE key
TTL key # 剩余过期时间
PTTL key # 毫秒
EXISTS key
TYPE key
TTL key # 剩余过期时间
PTTL key # 毫秒
键操作
键操作
DEL key
EXPIRE key 3600 # 设置过期时间
PERSIST key # 移除过期时间
RENAME key newkey
undefinedDEL key
EXPIRE key 3600 # 设置过期时间
PERSIST key # 移除过期时间
RENAME key newkey
undefined字符串
字符串
bash
SET key value
SET key value EX 3600 # 带过期时间
SETNX key value # 不存在时设置
GET key
MSET key1 val1 key2 val2
MGET key1 key2
INCR counter
INCRBY counter 10
DECR counter
APPEND key " suffix"
STRLEN keybash
SET key value
SET key value EX 3600 # 带过期时间
SETNX key value # 不存在时设置
GET key
MSET key1 val1 key2 val2
MGET key1 key2
INCR counter
INCRBY counter 10
DECR counter
APPEND key " suffix"
STRLEN key哈希
哈希
bash
HSET user:1 name "John" age 30
HGET user:1 name
HMSET user:1 name "John" age 30
HMGET user:1 name age
HGETALL user:1
HDEL user:1 age
HEXISTS user:1 name
HKEYS user:1
HVALS user:1
HINCRBY user:1 age 1bash
HSET user:1 name "John" age 30
HGET user:1 name
HMSET user:1 name "John" age 30
HMGET user:1 name age
HGETALL user:1
HDEL user:1 age
HEXISTS user:1 name
HKEYS user:1
HVALS user:1
HINCRBY user:1 age 1列表
列表
bash
LPUSH list value # 左侧插入
RPUSH list value # 右侧插入
LPOP list
RPOP list
LRANGE list 0 -1 # 获取所有
LLEN list
LINDEX list 0
LSET list 0 newvalue
LTRIM list 0 99 # 保留前100个
BLPOP list 10 # 阻塞弹出bash
LPUSH list value # 左侧插入
RPUSH list value # 右侧插入
LPOP list
RPOP list
LRANGE list 0 -1 # 获取所有
LLEN list
LINDEX list 0
LSET list 0 newvalue
LTRIM list 0 99 # 保留前100个
BLPOP list 10 # 阻塞弹出集合
集合
bash
SADD set member1 member2
SREM set member1
SMEMBERS set
SISMEMBER set member
SCARD set # 元素数量
SINTER set1 set2 # 交集
SUNION set1 set2 # 并集
SDIFF set1 set2 # 差集
SRANDMEMBER set 3 # 随机获取bash
SADD set member1 member2
SREM set member1
SMEMBERS set
SISMEMBER set member
SCARD set # 元素数量
SINTER set1 set2 # 交集
SUNION set1 set2 # 并集
SDIFF set1 set2 # 差集
SRANDMEMBER set 3 # 随机获取有序集合
有序集合
bash
ZADD zset 100 member1 200 member2
ZREM zset member1
ZRANGE zset 0 -1 # 按分数升序
ZRANGE zset 0 -1 WITHSCORES
ZREVRANGE zset 0 -1 # 按分数降序
ZRANK zset member # 排名
ZSCORE zset member # 分数
ZCOUNT zset 100 200 # 分数范围内数量
ZINCRBY zset 10 memberbash
ZADD zset 100 member1 200 member2
ZREM zset member1
ZRANGE zset 0 -1 # 按分数升序
ZRANGE zset 0 -1 WITHSCORES
ZREVRANGE zset 0 -1 # 按分数降序
ZRANK zset member # 排名
ZSCORE zset member # 分数
ZCOUNT zset 100 200 # 分数范围内数量
ZINCRBY zset 10 member持久化
持久化
RDB 快照
RDB 快照
bash
undefinedbash
undefined手动触发
手动触发
SAVE # 阻塞
BGSAVE # 后台
SAVE # 阻塞
BGSAVE # 后台
配置 redis.conf
配置 redis.conf
save 900 1 # 900秒内1次修改
save 300 10 # 300秒内10次修改
save 60 10000 # 60秒内10000次修改
dbfilename dump.rdb
dir /var/lib/redis
undefinedsave 900 1 # 900秒内1次修改
save 300 10 # 300秒内10次修改
save 60 10000 # 60秒内10000次修改
dbfilename dump.rdb
dir /var/lib/redis
undefinedAOF 日志
AOF 日志
bash
undefinedbash
undefined配置 redis.conf
配置 redis.conf
appendonly yes
appendfilename "appendonly.aof"
appendfsync everysec # always/everysec/no
appendonly yes
appendfilename "appendonly.aof"
appendfsync everysec # always/everysec/no
AOF 重写
AOF 重写
BGREWRITEAOF
BGREWRITEAOF
自动重写配置
自动重写配置
auto-aof-rewrite-percentage 100
auto-aof-rewrite-min-size 64mb
undefinedauto-aof-rewrite-percentage 100
auto-aof-rewrite-min-size 64mb
undefined主从复制
主从复制
bash
undefinedbash
undefined从节点配置
从节点配置
REPLICAOF master_host master_port
REPLICAOF NO ONE # 取消复制
REPLICAOF master_host master_port
REPLICAOF NO ONE # 取消复制
查看复制状态
查看复制状态
INFO replication
INFO replication
redis.conf 配置
redis.conf 配置
replicaof master_host master_port
masterauth master_password
replica-read-only yes
undefinedreplicaof master_host master_port
masterauth master_password
replica-read-only yes
undefined集群管理
集群管理
bash
undefinedbash
undefined创建集群
创建集群
redis-cli --cluster create
node1:6379 node2:6379 node3:6379
node4:6379 node5:6379 node6:6379
--cluster-replicas 1
node1:6379 node2:6379 node3:6379
node4:6379 node5:6379 node6:6379
--cluster-replicas 1
redis-cli --cluster create
node1:6379 node2:6379 node3:6379
node4:6379 node5:6379 node6:6379
--cluster-replicas 1
node1:6379 node2:6379 node3:6379
node4:6379 node5:6379 node6:6379
--cluster-replicas 1
集群信息
集群信息
redis-cli -c cluster info
redis-cli -c cluster nodes
redis-cli -c cluster info
redis-cli -c cluster nodes
添加节点
添加节点
redis-cli --cluster add-node new_node:6379 existing_node:6379
redis-cli --cluster add-node new_node:6379 existing_node:6379
重新分片
重新分片
redis-cli --cluster reshard node:6379
redis-cli --cluster reshard node:6379
检查集群
检查集群
redis-cli --cluster check node:6379
undefinedredis-cli --cluster check node:6379
undefined性能监控
性能监控
bash
undefinedbash
undefined服务器信息
服务器信息
INFO
INFO memory
INFO replication
INFO stats
INFO clients
INFO
INFO memory
INFO replication
INFO stats
INFO clients
实时监控
实时监控
MONITOR # 实时命令(调试用)
MONITOR # 实时命令(调试用)
慢查询
慢查询
SLOWLOG GET 10
SLOWLOG LEN
SLOWLOG RESET
SLOWLOG GET 10
SLOWLOG LEN
SLOWLOG RESET
配置慢查询
配置慢查询
CONFIG SET slowlog-log-slower-than 10000
CONFIG SET slowlog-max-len 128
CONFIG SET slowlog-log-slower-than 10000
CONFIG SET slowlog-max-len 128
内存分析
内存分析
MEMORY USAGE key
MEMORY DOCTOR
DEBUG OBJECT key
MEMORY USAGE key
MEMORY DOCTOR
DEBUG OBJECT key
客户端列表
客户端列表
CLIENT LIST
CLIENT KILL ID client_id
undefinedCLIENT LIST
CLIENT KILL ID client_id
undefined常见场景
常见场景
场景 1:分布式锁
场景 1:分布式锁
bash
undefinedbash
undefined加锁
加锁
SET lock:resource unique_value NX EX 30
SET lock:resource unique_value NX EX 30
解锁(Lua 脚本保证原子性)
解锁(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
undefinedEVAL "if redis.call('get',KEYS[1]) == ARGV[1] then return redis.call('del',KEYS[1]) else return 0 end" 1 lock:resource unique_value
undefined场景 2:限流
场景 2:限流
bash
undefinedbash
undefined滑动窗口限流
滑动窗口限流
MULTI
ZADD rate_limit:user:1 timestamp timestamp
ZREMRANGEBYSCORE rate_limit:user:1 0 (timestamp-60000)
ZCARD rate_limit:user:1
EXPIRE rate_limit:user:1 60
EXEC
undefinedMULTI
ZADD rate_limit:user:1 timestamp timestamp
ZREMRANGEBYSCORE rate_limit:user:1 0 (timestamp-60000)
ZCARD rate_limit:user:1
EXPIRE rate_limit:user:1 60
EXEC
undefined场景 3:缓存穿透防护
场景 3:缓存穿透防护
bash
undefinedbash
undefined布隆过滤器(需要 RedisBloom 模块)
布隆过滤器(需要 RedisBloom 模块)
BF.ADD filter key
BF.EXISTS filter key
BF.ADD filter key
BF.EXISTS filter key
空值缓存
空值缓存
SET key "" EX 60 # 缓存空值
undefinedSET key "" EX 60 # 缓存空值
undefined场景 4:批量删除
场景 4:批量删除
bash
undefinedbash
undefined使用 SCAN + DEL
使用 SCAN + DEL
redis-cli --scan --pattern "prefix:*" | xargs redis-cli DEL
redis-cli --scan --pattern "prefix:*" | xargs redis-cli DEL
使用 UNLINK(异步删除)
使用 UNLINK(异步删除)
UNLINK key1 key2 key3
undefinedUNLINK key1 key2 key3
undefined故障排查
故障排查
| 问题 | 排查方法 |
|---|---|
| 内存不足 | |
| 连接数过多 | |
| 响应慢 | |
| 主从延迟 | |
| 集群故障 | |
bash
undefined| 问题 | 排查方法 |
|---|---|
| 内存不足 | |
| 连接数过多 | |
| 响应慢 | |
| 主从延迟 | |
| 集群故障 | |
bash
undefined查找大 key
查找大 key
redis-cli --bigkeys
redis-cli --bigkeys
内存分析
内存分析
redis-cli --memkeys
redis-cli --memkeys
延迟测试
延迟测试
redis-cli --latency
redis-cli --latency-history
undefinedredis-cli --latency
redis-cli --latency-history
undefined