redis

Compare original and translation side by side

🇺🇸

Original

English
🇨🇳

Translation

Chinese

Redis 数据库管理

Redis 数据库管理

概述

概述

Redis 命令、持久化、集群配置等技能。
Redis 命令、持久化、集群配置等技能。

连接管理

连接管理

bash
undefined
bash
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
undefined
redis-cli -c -h hostname -p 6379
undefined

基础命令

基础命令

键操作

键操作

bash
undefined
bash
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
undefined
DEL 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 key
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 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 1
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 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 member
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 member

持久化

持久化

RDB 快照

RDB 快照

bash
undefined
bash
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
undefined
save 900 1 # 900秒内1次修改 save 300 10 # 300秒内10次修改 save 60 10000 # 60秒内10000次修改
dbfilename dump.rdb dir /var/lib/redis
undefined

AOF 日志

AOF 日志

bash
undefined
bash
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
undefined
auto-aof-rewrite-percentage 100 auto-aof-rewrite-min-size 64mb
undefined

主从复制

主从复制

bash
undefined
bash
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
undefined
replicaof master_host master_port masterauth master_password replica-read-only yes
undefined

集群管理

集群管理

bash
undefined
bash
undefined

创建集群

创建集群

redis-cli --cluster create
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

集群信息

集群信息

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
undefined
redis-cli --cluster check node:6379
undefined

性能监控

性能监控

bash
undefined
bash
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
undefined
CLIENT LIST CLIENT KILL ID client_id
undefined

常见场景

常见场景

场景 1:分布式锁

场景 1:分布式锁

bash
undefined
bash
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
undefined
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
undefined

场景 2:限流

场景 2:限流

bash
undefined
bash
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
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
undefined

场景 3:缓存穿透防护

场景 3:缓存穿透防护

bash
undefined
bash
undefined

布隆过滤器(需要 RedisBloom 模块)

布隆过滤器(需要 RedisBloom 模块)

BF.ADD filter key BF.EXISTS filter key
BF.ADD filter key BF.EXISTS filter key

空值缓存

空值缓存

SET key "" EX 60 # 缓存空值
undefined
SET key "" EX 60 # 缓存空值
undefined

场景 4:批量删除

场景 4:批量删除

bash
undefined
bash
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
undefined
UNLINK key1 key2 key3
undefined

故障排查

故障排查

问题排查方法
内存不足
INFO memory
,
MEMORY DOCTOR
连接数过多
INFO clients
,
CLIENT LIST
响应慢
SLOWLOG GET
, 检查大 key
主从延迟
INFO replication
集群故障
CLUSTER INFO
,
CLUSTER NODES
bash
undefined
问题排查方法
内存不足
INFO memory
,
MEMORY DOCTOR
连接数过多
INFO clients
,
CLIENT LIST
响应慢
SLOWLOG GET
, 检查大 key
主从延迟
INFO replication
集群故障
CLUSTER INFO
,
CLUSTER NODES
bash
undefined

查找大 key

查找大 key

redis-cli --bigkeys
redis-cli --bigkeys

内存分析

内存分析

redis-cli --memkeys
redis-cli --memkeys

延迟测试

延迟测试

redis-cli --latency redis-cli --latency-history
undefined
redis-cli --latency redis-cli --latency-history
undefined