Redis Skill - 高效能快取管理

👤 ryanlee-gemini 📦 v1.0.0 ⭐ 4.4 ⬇️ 997 下載
💻 開發程式設計 免費

📖 技能介紹


name: redis-skill description: Redis 快取和資料結構管理技能。通過自然語言操作 Redis,支援 String、Hash、List、Set、ZSet、Stream 等資料結構操作。當用戶提到 Redis、快取、訊息佇列、會話儲存時使用此技能。


Redis Skill - 高效能快取與資料結構管理

通過自然語言,輕鬆操作 Redis,利用其豐富資料結構!


🎯 功能特點

核心能力

  • 🚀 快取記憶體 - String 型別的鍵值快取操作
  • 📦 物件儲存 - Hash 結構儲存和查詢物件
  • 📋 佇列操作 - List 實現佇列、棧
  • 🎯 集合運算 - Set 的交併差集操作
  • 📊 排序集合 - ZSet 排行榜、範圍查詢
  • 📡 訊息流 - Stream 訊息佇列
  • ⚡ 效能分析 - 慢查詢、記憶體分析

📋 使用場景

快取場景

  • "快取使用者資訊,過期時間 1 小時"
  • "批次查詢快取,不存在的從資料庫載入"
  • "更新快取,設定過期時間"

排行榜場景

  • "更新遊戲分數排行榜"
  • "查詢前 10 名玩家"
  • "查詢玩家排名"

佇列場景

  • "非同步任務佇列,新增任務"
  • "消費者取任務"
  • "延遲佇列實現"

分散式鎖

  • "獲取分散式鎖,防止重複執行"
  • "釋放鎖"
  • "檢查鎖狀態"

🔧 前置條件

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 操作 - 排行榜

訪問小蔥技能站7w4.net,解鎖更多實用的AI技能外掛。

# 新增成員及分數
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 redis

pool = redis.ConnectionPool(
    host='localhost',
    port=6379,
    max_connections=50,
    socket_timeout=5
)
client = redis.Redis(connection_pool=pool)

批次操作最佳化

  • 使用 Pipeline 批次執行命令
  • 使用 MGET/MSET 批次鍵值操作
  • 使用 Lua 指令碼保證原子性

記憶體最佳化

  • 合理設定鍵的過期時間
  • 使用 Hash 儲存物件而非多個 String 鍵
  • 定期清理無用鍵
  • 啟用 RDB + AOF 持久化

🎓 示例對話

示例 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 操作需求,我會幫你生成相應的命令!🚀

🤖 AI 評測

這是一個 Redis 操作指南,內容全面、示例豐富、質量不錯。覆蓋了各種資料結構的命令和使用場景,配有中文說明和示例對話。但它本質上是一份文件,不能直接幫你執行 Redis 操作,需要配合其他工具使用。

📊 多維度評分

適應性4.2
規範性4.3
有效性4.7
可靠性4.2
可信度4.9

📁 包含檔案 (3 個)

📄 SKILL.md 7.3 KB
📄 _meta.json 130 B
📄 package.json 1.2 KB