| name | redis |
| description | Redis 数据库管理 |
| version | 1.0.0 |
| author | terminal-skills |
| tags | ["database","redis","cache","nosql","key-value"] |
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
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
save 900 1
save 300 10
save 60 10000
dbfilename dump.rdb
dir /var/lib/redis
AOF 日志
appendonly yes
appendfilename "appendonly.aof"
appendfsync everysec
BGREWRITEAOF
auto-aof-rewrite-percentage 100
auto-aof-rewrite-min-size 64mb
主从复制
REPLICAOF master_host master_port
REPLICAOF NO ONE
INFO replication
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
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:缓存穿透防护
BF.ADD filter key
BF.EXISTS filter key
SET key "" EX 60
场景 4:批量删除
redis-cli --scan --pattern "prefix:*" | xargs redis-cli DEL
UNLINK key1 key2 key3
故障排查
| 问题 | 排查方法 |
|---|
| 内存不足 | INFO memory, MEMORY DOCTOR |
| 连接数过多 | INFO clients, CLIENT LIST |
| 响应慢 | SLOWLOG GET, 检查大 key |
| 主从延迟 | INFO replication |
| 集群故障 | CLUSTER INFO, CLUSTER NODES |
redis-cli --bigkeys
redis-cli --memkeys
redis-cli --latency
redis-cli --latency-history