Get the FREE Ultimate OpenClaw Setup Guide →
npx machina-cli add skill chaterm/terminal-skills/redis --openclaw
Files (1)
SKILL.md
5.6 KB

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

Source

git clone https://github.com/chaterm/terminal-skills/blob/main/database/redis/SKILL.mdView on GitHub

Overview

你将掌握与 Redis 服务器交互的全流程:从本地或远程连接、执行键操作与数据结构命令,到配置持久化(RDB/AOF)、设置主从复制与集群,以及通过监控与诊断工具实现高可用与高性能的缓存与队列解决方案。该技能覆盖常用场景的端到端操作与故障排查。

How This Skill Works

你通过 redis-cli 或等效客户端与 Redis 服务进行交互。你可以执行字符串、哈希、列表、集合、有序集合等数据结构的命令,配置持久化和复制关系,并在需要时部署集群。性能与故障排查工具(INFO、MONITOR、SLOWLOG、MEMORY 等)帮助你诊断瓶颈、内存问题和集群健康状态。

When to Use It

  • 需要高性能缓存或会话存储的应用场景
  • 需要分布式锁、限流或去重等分布式能力
  • 需要持久化、备份与灾难恢复的 Redis 部署
  • 需要从单机扩展到主从复制以提升读取能力
  • 需要管理 Redis 集群与分区以实现水平扩展

Quick Start

  1. 连接到 Redis:redis-cli -h HOST -p PORT -a PASSWORD
  2. 查看基础信息与内存状态:INFO memory; INFO replication
  3. 执行基础数据操作:SET key value; GET key
  4. 查看与管理键:TTL key; PTTL key; DEL key

Best Practices

  • 优先使用 SCAN 而非 KEYS 进行键遍历,避免阻塞生产环境
  • 对大批量删除使用 UNLINK 而非 DEL 以异步删除
  • 对原子性操作使用 Lua 脚本(EVAL)或 Redis 数据结构原子操作组合
  • 监控内存使用与慢查询,结合 MEMORY DOCTOR、SLOWLOG 与 INFO memory
  • 合理配置持久化并结合备份与集群策略,避免单点故障

Example Use Cases

  • 场景 1:分布式锁 ```bash 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:限流 ```bash 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:缓存穿透防护 ```bash # 使用布隆过滤器(需要 RedisBloom 模块) BF.ADD filter key BF.EXISTS filter key # 空值缓存防护 SET key "" EX 60 ```
  • 场景 4:批量删除 ```bash # 扫描并删除前缀键 redis-cli --scan --pattern "prefix:*" | xargs redis-cli DEL # 使用异步删除 UNLINK key1 key2 key3 ```
  • 场景 5:实时队列/任务调度 ```bash # 生产者:入队 LPUSH jobs:queue:high priority_task # 消费者:阻塞取出 BR POP jobs:queue:high 0 ```

Frequently Asked Questions

Add this skill to your agents

Related Skills

Sponsor this space

Reach thousands of developers