Redis 数据库管理
概述
Redis 命令、持久化、集群配置等技能。
连接管理
本地连接
redis-cli
远程连接
redis-cli -h hostname -p 6379 redis-cli -h hostname -p 6379 -a password
连接并选择数据库
redis-cli -n 1
执行单条命令
redis-cli ping redis-cli get key
集群连接
redis-cli -c -h hostname -p 6379
基础命令
键操作
查看键
KEYS * # 所有键(生产慎用) KEYS user:* # 匹配模式 SCAN 0 MATCH user:* COUNT 100 # 安全遍历
键信息
EXISTS key TYPE key TTL key # 剩余过期时间 PTTL key # 毫秒
键操作
DEL key EXPIRE key 3600 # 设置过期时间 PERSIST key # 移除过期时间 RENAME key newkey
字符串
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
哈希
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
列表
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 # 阻塞弹出
集合
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 # 随机获取
有序集合
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 快照
手动触发
SAVE # 阻塞 BGSAVE # 后台
配置 redis.conf
save 900 1 # 900秒内1次修改 save 300 10 # 300秒内10次修改 save 60 10000 # 60秒内10000次修改
dbfilename dump.rdb dir /var/lib/redis
AOF 日志
配置 redis.conf
appendonly yes appendfilename "appendonly.aof" appendfsync everysec # always/everysec/no
AOF 重写
BGREWRITEAOF
自动重写配置
auto-aof-rewrite-percentage 100 auto-aof-rewrite-min-size 64mb
主从复制
从节点配置
REPLICAOF master_host master_port REPLICAOF NO ONE # 取消复制
查看复制状态
INFO replication
redis.conf 配置
replicaof master_host master_port masterauth master_password replica-read-only yes
集群管理
创建集群
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 --cluster add-node new_node:6379 existing_node:6379
重新分片
redis-cli --cluster reshard node:6379
检查集群
redis-cli --cluster check node:6379
性能监控
服务器信息
INFO INFO memory INFO replication INFO stats INFO clients
实时监控
MONITOR # 实时命令(调试用)
慢查询
SLOWLOG GET 10 SLOWLOG LEN SLOWLOG RESET
配置慢查询
CONFIG SET slowlog-log-slower-than 10000 CONFIG SET slowlog-max-len 128
内存分析
MEMORY USAGE key MEMORY DOCTOR DEBUG OBJECT key
客户端列表
CLIENT LIST CLIENT KILL ID client_id
常见场景
场景 1:分布式锁
加锁
SET lock:resource unique_value NX EX 30
解锁(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
场景 2:限流
滑动窗口限流
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
场景 3:缓存穿透防护
布隆过滤器(需要 RedisBloom 模块)
BF.ADD filter key BF.EXISTS filter key
空值缓存
SET key "" EX 60 # 缓存空值
场景 4:批量删除
使用 SCAN + DEL
redis-cli --scan --pattern "prefix:*" | xargs redis-cli DEL
使用 UNLINK(异步删除)
UNLINK key1 key2 key3
故障排查
问题 排查方法
内存不足 INFO memory , MEMORY DOCTOR
连接数过多 INFO clients , CLIENT LIST
响应慢 SLOWLOG GET , 检查大 key
主从延迟 INFO replication
集群故障 CLUSTER INFO , CLUSTER NODES
查找大 key
redis-cli --bigkeys
内存分析
redis-cli --memkeys
延迟测试
redis-cli --latency redis-cli --latency-history