🦀 ClawHub
Redis Skill - 高性能缓存管理
by @ryanlee-gemini
Redis 缓存和数据结构管理技能。通过自然语言操作 Redis,支持 String、Hash、List、Set、ZSet、Stream 等数据结构操作。当用户提到 Redis、缓存、消息队列、会话存储时使用此技能。
TERMINAL
clawhub install redis-skill📖 About This Skill
name: redis-skill description: Redis 缓存和数据结构管理技能。通过自然语言操作 Redis,支持 String、Hash、List、Set、ZSet、Stream 等数据结构操作。当用户提到 Redis、缓存、消息队列、会话存储时使用此技能。
Redis Skill - 高性能缓存与数据结构管理
通过自然语言,轻松操作 Redis,利用其丰富数据结构!
🎯 功能特点
核心能力
📋 使用场景
缓存场景
排行榜场景
队列场景
分布式锁
🔧 前置条件
1. 安装 Redis 客户端
安装 redis-cli:
Ubuntu/Debian:
sudo apt update
sudo apt install redis-tools
macOS:
brew install redis
Python 客户端(高级操作):
pip install redis
2. 连接 Redis
使用 redis-cli:
redis-cli -h localhost -p 6379
使用环境变量:
export REDIS_HOST=localhost
export REDIS_PORT=6379
export REDIS_PASSWORD=your_password
💻 常用操作
String 操作 - 基础缓存
# 设置缓存,过期时间 3600 秒
SET user:123 "{'name': 'Alice', 'email': 'alice@example.com'}" EX 3600获取缓存
GET user:123批量获取
MGET user:123 user:456 user:789原子递增(计数器)
INCR page_views
INCRBY download_counter 100不存在才设置(分布式锁)
SETNX lock:task_123 1
Hash 操作 - 对象存储
# 存储对象
HSET user:123 name Alice email alice@example.com age 28获取单个字段
HGET user:123 name获取所有字段
HGETALL user:123批量获取
HMGET user:123 name email age删除字段
HDEL user:123 age检查字段是否存在
HEXISTS user:123 email#获取所有字段名
HKEYS user:123
获取所有值
HVALS user:123
List 操作 - 队列/栈
# 左侧插入(队列头部)
LPUSH queue:task "task_data_1"右侧插入(队列尾部)
RPUSH queue:task "task_data_2"左侧弹出(队列消费)
LPOP queue:task右侧弹出(栈弹出)
RPOP queue:task范围查询(分页)
LRANGE queue:task 0 9列表长度
LLEN queue:task阻塞弹出(生产者-消费者)
BLPOP queue:task 30
Set 操作 - 集合运算
# 添加成员
SADD users:online user_123 user_456 user_789检查成员是否存在
SISMEMBER users:online user_123获取所有成员
SMEMBERS users:online集合大小
SCARD users:online随机获取 N 个成员
SRANDMEMBER users:online 3交集(共同在线的群成员)
SINTER group1:members group2:members并集(所有群成员)
SUNION group1:members group2:members差集(在一个集合但不在另一个)
SDIFF group1:members group2:members将结果存储到新集合
SINTERSTORE common_members group1:members group2:members
ZSet 操作 - 排行榜
# 添加成员及分数
ZADD leaderboard 1500 player_123 2000 player_456 1800 player_789更新分数
ZINCRBY leaderboard 100 player_123查询排名(倒序)
ZREVRANGE leaderboard 0 9查询排名(正序)
ZRANGE leaderboard 0 9查询成员分数
ZSCORE leaderboard player_123查询成员排名
ZREVRANK leaderboard player_123按分数范围查询
ZRANGEBYSCORE leaderboard 1500 2000按分数范围删除
ZREMRANGEBYSCORE leaderboard 0 1000集合大小
ZCARD leaderboard
Stream 操作 - 消息队列
# 添加消息
XADD logs "*" timestamp 1700000000 level "INFO" message "User login"消费消息
XREAD STREAMS logs 0创建消费者组
XGROUP CREATE logs consumers_group 0消费者读取消息
XREADGROUP GROUP consumers_group consumer_1 STREAMS logs >确认消息处理完成
XACK logs consumers_group message_id
🔍 高级功能
分布式锁
# 获取锁(SETNX + 过期时间)
SET lock:resource_123 "unique_id" NX EX 30检查锁是否属于自己
GET lock:resource_123释放锁(Lua 脚本保证原子性)
EVAL "
if redis.call('get', KEYS[1]) == ARGV[1] then
return redis.call('del', KEYS[1])
else
return 0
end
" 1 lock:resource_123 "unique_id"
慢查询日志
# 配置慢查询阈值(毫秒)
CONFIG SET slowlog-log-slower-than 10000查看慢查询
SLOWLOG GET 10清空慢查询日志
SLOWLOG RESET
内存分析
# 查看内存使用情况
INFO memory查看键的内存占用
MEMORY USAGE user:123查找大键
SCAN 0 MATCH * COUNT 100
批量操作
# 使用 Pipeline 减少网络往返
EVAL "
local results = {}
for i = 1, #KEYS do
table.insert(results, redis.call('GET', KEYS[i]))
end
return results
" 3 key1 key2 key3
⚡ 性能优化
连接池配置
import redispool = redis.ConnectionPool(
host='localhost',
port=6379,
max_connections=50,
socket_timeout=5
)
client = redis.Redis(connection_pool=pool)
批量操作优化
内存优化
🎓 示例对话
示例 1:缓存管理
用户: "缓存用户信息,过期时间 1 小时"AI: "正在设置缓存..."
SET user:123 '{"id": 123, "name": "Alice", "email": "alice@example.com"}' EX 3600
示例 2:排行榜更新
用户: "更新玩家得分 1500,然后查询前 10 名"AI: "更新分数并查询排行榜"
ZADD leaderboard 1500 player_123
ZREVRANGE leaderboard 0 9 WITHSCORES
示例 3:分布式锁
用户: "获取任务 456 的分布式锁,防止重复执行"AI: "尝试获取分布式锁(30秒过期)"
SET lock:task_456 "unique_id_$(date +%s%N)" NX EX 30
⚠️ 注意事项
安全建议
1. 启用认证 - 配置 requirepass密码 2. 网络隔离 - 不要暴露到公网 3. 最小权限 - 使用不同的 Redis 实例隔离不同业务 4. 敏感数据加密 - 存储在 Redis 的敏感数据要加密性能建议
1. 避免大键 - 大键会阻塞 Redis 2. 合理设置过期 - 防止内存泄漏 3. 使用 Pipeline - 减少网络往返 4. 监控内存 - 设置 maxmemory 防止 OOM📚 参考资料
开始使用: 告诉我你的 Redis 操作需求,我会帮你生成相应的命令!🚀