🔴 Redis — 高效缓存、队列和数据结构管理
v1.0.0使用 Redis 实现高效的缓存、队列和数据结构管理,包括合理的过期和持久化策略。提供最佳实践指南,涵盖数据结构选择、原子性操作、发布订阅模式、持久化配置、内存管理、集群使用等方面的指导。
4· 2,100·18 当前·18 累计
安全扫描
OpenClaw
安全
high confidence本技能为 Redis 最佳实践指南,仅包含指令,无隐藏安装或凭证请求。确保在执行指令前考虑安全风险,尤其是当代理可以访问 Redis 实例时。
评估建议
这是一个连贯的、仅包含指令的 Redis 最佳实践指南,无隐藏安装或凭证请求。执行前请考虑:如果代理可以运行 `redis-cli` 或访问 Redis 服务器,它可能会修改数据或通过 `EVAL` 执行任意 Lua 脚本。为限制风险,请隔离生产环境、避免提供凭证或仅允许读取/监控访问。...详细分析 ▾
✓ 用途与能力
名称、描述和声明的依赖(可选的 redis-cli)与内容一致:缓存、队列、数据结构、过期、持久化、集群和内存管理。无与操作 Redis 无关的请求。
✓ 指令范围
SKILL.md 仅包含 Redis 使用指南和示例命令(SET、EXPIRE、XADD、EVAL 等)。不指示读取无关文件、拉取外部 URL 或访问无关环境变量。注意:它建议使用 EVAL(Lua)和其他强大命令——如果代理实际执行这些命令对可达的 Redis 实例,命令将以 Redis 连接的权限运行。
✓ 安装机制
无安装规格 — 仅指令技能。技能本身无下载或写入磁盘的操作。
✓ 凭证需求
无环境变量、凭证或配置路径被请求。列出的单个二进制(redis-cli)适合声明的目的。
✓ 持久化与权限
技能不请求永久存在,不修改其他技能,并使用默认调用设置。它是用户可调用且不总是启用的。
安全有层次,运行前请审查代码。
运行时依赖
🖥️ OSLinux · macOS · Windows
版本
latestv1.0.02026/2/10
初始发布
● 无害
安装命令 点击复制
官方npx clawhub@latest install redis-store
镜像加速npx clawhub@latest install redis-store --registry https://cn.clawhub-mirror.com
技能文档
过期机制(内存泄漏)
- 没有 TTL 的键会永久存在——给每个缓存键设置过期时间:
SET key value EX 3600 - SET 后无法单独添加 TTL——使用
SETEX或SET ... EX EXPIRE在键更新时默认重置——SET会移除 TTL;使用SET ... KEEPTTL(Redis 6+)- 惰性过期:过期键在访问时才被删除——可能占用内存直到被访问
- 大数据库中使用
SCAN:过期键在清理周期运行前仍会显示
被低估的数据结构
- 有序集合做限流:
ZADD limits:{user} {now} {request_id}+ZREMRANGEBYSCORE实现滑动窗口 - HyperLogLog 做唯一计数:
PFADD visitors {ip},数十亿唯一值仅需 12KB - Streams 做队列:
XADD、XREAD、XACK——比 LIST 更适合可靠队列 - Hash 存对象:
HSET user:1 name "Alice" email "a@b.com"——比 JSON 字符串更省内存
原子性陷阱
GET然后SET不是原子操作——其他客户端可能在中间修改;使用INCR、SETNX或 LuaSETNX做锁:SET lock:resource {token} NX EX 30——NX = 仅在不存在时设置WATCH/MULTI/EXEC做乐观锁——如果被监视的键被修改,事务会中止- Lua 脚本是原子的——用于复杂操作:
EVAL "script" keys args
Pub/Sub 限制
- 消息不持久——断开连接的订阅者会错过消息
- 最多一次投递——无确认、无重试
- 使用 Streams 做可靠消息传递——
XREAD BLOCK+XACK模式 - 集群中的 Pub/Sub:消息发送到所有节点——可用但会增加开销
持久化配置
- RDB(快照):恢复快,但快照之间可能丢数据——默认每 5 分钟
- AOF(追加日志):数据丢失少,恢复慢——
appendfsync everysec是好的平衡 - 两者都关闭 = 纯缓存——如果数据可以重新生成则可接受
BGSAVE手动快照——不阻塞但会 fork 进程,需要足够内存
内存管理(关键)
- 必须设置
maxmemory——否则 Redis 会用完所有 RAM,然后 swap = 灾难 - 淘汰策略:
allkeys-lru用于缓存,volatile-lru用于混合,noeviction用于持久数据 INFO memory显示使用情况——监控used_memory与maxmemory- 大键影响淘汰——一个 1GB 的键淘汰效果差;优先使用多个小键
集群
- 哈希槽:键按哈希分布——多键操作需要在同一槽
- 哈希标签:
{user:1}:profile和{user:1}:sessions在同一槽——用于关联键 - 不支持跨槽
MGET/MSET——除非所有键在同一槽,否则报错 MOVED重定向:客户端必须跟随——使用支持集群的客户端库
常见模式
- 缓存旁路:查 Redis,未命中 → 查数据库 → 写 Redis——标准缓存
- 写穿透:同时写数据库和 Redis——保持缓存新鲜
- 限流器:
INCR requests:{ip}:{minute}加EXPIRE——简单固定窗口 - 分布式锁:
SET ... NX EX+ 唯一 token——释放时验证 token
连接管理
- 连接池:复用连接——创建连接开销大
- 管道命令:批量发送不等响应——减少往返次数
- 关闭时
QUIT——优雅断开 - Sentinel 或 Cluster 做高可用——单 Redis 是单点故障
常见错误
- 缓存键没有 TTL——内存增长直到 OOM
- 作为主数据库但不开启持久化——重启后数据丢失
- 单线程 Redis 中使用阻塞操作——
KEYS *会阻塞一切;使用SCAN - 存储大对象——Redis 在内存中运行;100MB 的值很昂贵
- 忽略
maxmemory——没有限制的生产 Redis 会崩溃主机
数据来源:ClawHub ↗ · 中文优化:龙虾技能库
OpenClaw 技能定制 / 插件定制 / 私有工作流定制
免费技能或插件可能存在安全风险,如需更匹配、更安全的方案,建议联系付费定制