Redis
Public Agent Skills for Terminal and Kubernetes
npx -y skills add chaterm/terminal-skills --skill redisAssembled from the repository path, not quoted from the project. Check it against their README if it does not work.
What its author says it does
Copied from the file, not written here
Redis 数据库管理
SKILL.md
5.6 KB, as published. Nobody here has run it
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