Redis 缓存和数据结构管理技能。通过自然语言操作 Redis,支持 String、Hash、List、Set、ZSet、Stream 等数据结构操作。当用户提到 Redis、缓存、消息队列、会话存储时使用此技能。
Redis Skill - 高性能缓存与数据结构管理是一项面向实际任务的技能,主要用于通过自然语言,轻松操作 Redis,利用其丰富数据结构!🎯 功能特点;
🎯 集合运算 - Set 的交并差集操作;📊 排序集合 - ZSet 排行榜、范围查询;📡 消息流 - Stream 消。它将相关步骤、工具调用和结果整理方式集中到统一流程中,帮助使用者更快完成目标并减少重复操作。从功能定位来看,该技能强调把分散的操作要求整理成清晰、可复用的处理流程,使用户能够围绕既定目标快速准备输入、选择执行方式并获得结构化结果。
实际使用前应先确认任务范围、数据来源、运行环境、必要权限和关键参数,再依据技能说明逐步执行;若输入条件不完整,应先补齐信息或采用保守配置,避免因错误假设导致结果偏离需求。执行过程中需要关注工具调用是否成功、接口或依赖是否可用、输出格式是否符合预期,并对异常提示、缺失字段和边界情况进行处理;涉及批量任务时,还应保存进度,避免中断后重复操作。该技能适合用于一次性任务,也可以接入自动化工作流,与其他技能或上层代理配合完成更完整的业务链路;在组合使用时,应明确每一步的输入输出关系,并避免不同步骤之间出现参数冲突。
通过自然语言,轻松操作 Redis,利用其丰富数据结构!
安装 redis-cli:
Ubuntu/Debian:
sudo apt update sudo apt install redis-tools
macOS:
brew install redis
Python 客户端(高级操作):
pip install redis
使用 redis-cli:
redis-cli -h localhost -p 6379
使用环境变量:
export REDIS_HOST=localhost export REDIS_PORT=6379 export REDIS_PASSWORD=your_password
# 设置缓存,过期时间 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
# 存储对象 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
# 左侧插入(队列头部) 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
# 添加成员 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
# 添加成员及分数 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
# 添加消息 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 redis
pool = redis.ConnectionPool(
host='localhost',
port=6379,
max_connections=50,
socket_timeout=5
)
client = redis.Redis(connection_pool=pool)
用户: "缓存用户信息,过期时间 1 小时"
AI: "正在设置缓存..."
SET user:123 '{"id": 123, "name": "Alice", "email": "alice@example.com"}' EX 3600
用户: "更新玩家得分 1500,然后查询前 10 名"
AI: "更新分数并查询排行榜"
ZADD leaderboard 1500 player_123 ZREVRANGE leaderboard 0 9 WITHSCORES
用户: "获取任务 456 的分布式锁,防止重复执行"
AI: "尝试获取分布式锁(30秒过期)"
SET lock:task_456 "unique_id_$(date +%s%N)" NX EX 30
开始使用: 告诉我你的 Redis 操作需求,我会帮你生成相应的命令!🚀