install
source · Clone the upstream repo
git clone https://github.com/chaterm/terminal-skills
Claude Code · Install into ~/.claude/skills/
T=$(mktemp -d) && git clone --depth=1 https://github.com/chaterm/terminal-skills "$T" && mkdir -p ~/.claude/skills && cp -r "$T/database/redis" ~/.claude/skills/chaterm-terminal-skills-redis && rm -rf "$T"
manifest:
database/redis/SKILL.mdsource content
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
故障排查
| 问题 | 排查方法 |
|---|---|
| 内存不足 | , |
| 连接数过多 | , |
| 响应慢 | , 检查大 key |
| 主从延迟 | |
| 集群故障 | , |
# 查找大 key redis-cli --bigkeys # 内存分析 redis-cli --memkeys # 延迟测试 redis-cli --latency redis-cli --latency-history