核心資料效能

快取

將最熱的資料放在記憶體中,讀取在遠低於一毫秒內回應,而且引擎會讓每個核心都派上用場。

實測的管線化 GET/s
36.6M
TTL 精確度
ns
現有用戶端皆可使用
RESP2/3
步驟 1 / 5
透過快取讀取

命中會直接從記憶體傳回。完全不碰資料庫。

範例工作階段playing
# 透過快取讀取
hotkv> GET product:1001
"{\"name\":\"Desk lamp\",\"price\":39}"

以真實 HotKV 指令與範例回覆呈現的動畫導覽。點擊任一步驟即可跳到該步驟。 指令與回覆維持英文,與您在 HotKV 中輸入及看到的完全一致。

問題

對於每秒被讀取上千次的資料,直接去查資料庫既慢又昂貴。每次頁面瀏覽、API 呼叫或儀表板重新整理,都會重複同樣的查詢,資料庫遠在您的應用程式之前就先成為瓶頸。

HotKV 如何處理

HotKV 位於資料庫前方,並將結果保存在記憶體中。您的應用程式先從 HotKV 讀取,只有在未命中時才退回資料庫。由於 HotKV 同時以多個執行緒執行指令,忙碌的快取不會把所有用戶端都擠進單一核心,而標籤則讓您能在底層資料變動時,讓一整組項目失效。

逐步說明

逐個指令看看發生了什麼事

  1. 01

    透過快取讀取

    命中會直接從記憶體傳回。完全不碰資料庫。

    GET product:1001
  2. 02

    未命中,所以載入一次並快取

    未命中時,應用程式讀取一次資料庫,並將結果快取五分鐘。

    SET product:2002 "{\"name\":\"Oak desk\",\"price\":420}" EX 300
  3. 03

    依相依的內容為項目加上標籤

    每個顯示照明商品的快取頁面都帶有相同的標籤。

    TAG.SET product:1001 catalog:lighting
  4. 04

    讓整組項目失效

    價格變了。列出帶有該標籤的所有鍵,並在同一個管線中刪除它們。

    TAG.MEMBERS catalog:lighting
  5. 05

    存活時間極短的項目

    一個已設定好的瞬時權杖,必須在 250 ms 後消失,精確度達奈秒。

    NEXPIRE flash:token:9 250000000
適用之處

真實世界的情境

網路商店

商品頁面、價格與庫存量每秒被讀取上千次,並在商品目錄變動時依標籤更新。

API 與行動後端

熱門端點的回應以短 TTL 快取,因此流量高峰打到的是記憶體,而不是資料庫。

內容網站

渲染出的片段與文章中繼資料會快取數分鐘,並在編輯發布時依標籤失效。

內建

您能獲得什麼

從秒到奈秒的 TTL

EXPIRE 與 PEXPIRE 與您預期的一樣運作。NEXPIRE 則加入奈秒精確度。

EXPIREPEXPIRENEXPIRE

依標籤失效

以 TAG.SET 為鍵加上標籤,再找出帶有某個標籤的所有鍵。

TAG.SETTAG.MEMBERS

選用壓縮

大型內容可以壓縮,讓更多工作集容納在記憶體中。

多執行緒讀取

指令在平行執行緒上執行,因此吞吐量隨核心數成長。數據請見效能頁面。

GETMGET

常見問題

我可以使用現有的 Redis 用戶端嗎?

HotKV 支援 Redis 協定(RESP2 與 RESP3),因此標準的 Redis 用戶端都能連線。請查閱指令參考,確認您仰賴的指令。

如何讓一組快取的鍵失效?

快取時以 TAG.SET 為鍵加上標籤,然後呼叫 TAG.MEMBERS 並刪除傳回的鍵。

36.6M 這個數字從哪裡來?

它是 HotKV 公開基準測試中的管線化 GET 吞吐量。方法與硬體請見效能頁面。

相關使用情境

在您自己的工作負載上試試看

HotKV 支援 Redis 協定,因此您可以將現有的用戶端指向它,並執行這些相同的指令。