# Redis中慢查詢和訂閱模式是什么
## 一、Redis慢查詢機制
### 1. 慢查詢的定義與作用
Redis慢查詢日志用于記錄執行時間超過預設閾值的命令,幫助開發者識別潛在性能瓶頸。當命令執行時間超過`slowlog-log-slower-than`配置的微秒值時,該命令會被記錄到內存隊列中。
### 2. 核心配置參數
```redis
# 慢查詢閾值(單位:微秒,默認10000=10ms)
slowlog-log-slower-than 10000
# 慢查詢日志最大存儲條數(默認128)
slowlog-max-len 128
# 獲取慢查詢日志(可選參數N指定條數)
SLOWLOG GET [N]
# 獲取當前日志數量
SLOWLOG LEN
# 清空慢查詢日志
SLOWLOG RESET
slowlog-max-len
發布訂閱(Pub/Sub)是一種消息通信模式,包含: - 發布者(Publisher):向頻道發送消息 - 訂閱者(Subscriber):訂閱頻道接收消息 - 頻道(Channel):消息傳輸的媒介
# 訂閱頻道(可多個)
SUBSCRIBE news.sports news.tech
# 發布消息到指定頻道
PUBLISH news.sports "比賽結果:湖人勝出"
# 取消訂閱
UNSUBSCRIBE [channel...]
支持glob-style模式匹配:
PSUBSCRIBE news.*
PUNSUBSCRIBE news.*
特性 | 說明 |
---|---|
實時性 | 消息即時推送,無持久化 |
無狀態 | 訂閱者斷開后丟失離線消息 |
廣播機制 | 所有訂閱者都會收到相同消息 |
graph TD
A[發布訂閱] -->|特點| B(即時廣播)
C[消息隊列] -->|特點| D(持久化存儲)
B --> E(適合實時通知)
D --> F(適合任務分發)
import redis
r = redis.StrictRedis()
slow_logs = r.slowlog_get()
for log in slow_logs:
print(f"命令: {log['command']} 耗時: {log['duration']}微秒")
KEYS *
→ 改用SCAN
// Node.js示例
const redis = require('redis');
const sub = redis.createClient();
sub.on('message', (channel, message) => {
io.emit(channel, message); // 通過Socket.io廣播
});
sub.subscribe('notifications');
// Spring Boot監聽示例
@RedisListener(channel = "order.update")
public void handleOrderUpdate(OrderEvent event) {
inventoryService.updateStock(event);
}
SUBSCRIBE
/PSUBSCRIBE
重試機制# 查看客戶端訂閱狀態
CLIENT LIST | grep sub
知識擴展:Redis 6.2新增的
SLOWLOG GET EXECUTION_TIME
命令可以獲取更精確的執行時間分析數據。
通過合理使用慢查詢監控和發布訂閱模式,可以顯著提升Redis在復雜業務場景下的可靠性和實時性表現。 “`
注:本文實際約1500字,包含技術要點、配置示例、可視化圖表和代碼片段??筛鶕枰{整各部分詳細程度,建議在實際使用時補充具體業務場景案例。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。