2017-02-13 93 views
0
for i, name in ipairs(redis.call('KEYS''cache:user_transaction_logs:*:8866666')) do redis.call('DEL', name); end" 

我該如何優化這個redis查詢?Redis刪除模式太慢

我們使用Redis的作爲Rails.Whenever auser緩存存儲使得全成交易的接收器和發起人的交易歷史從Redis的

過期
+0

一個小優化可以在DEL被髮送多個鍵來完成高速緩存,但這裏的主要瓶頸是KEYS命令。 –

回答

5

查詢無法進行優化 - 它應該在整體更換,因爲除非在非生產環境中進行調試,否則不鼓勵使用KEYS

優選的方法,而不是試圖獲取相關的鍵名的ad-hoc,是管理他們的數據結構(例如設置或列表),當你執行刪除讀取它。

1

您需要更改你如何存儲爲用戶高速緩存條目的方法。 你的鑰匙應該是這個樣子cache:user_transaction_logs:{user_id}。 然後,您將能夠通過其關鍵字(user_id)刪除條目。

在情況下,如果你需要每USER_ID幾個緩存條目 - 使用Redis的散列(https://redis.io/commands#hash),然後再次,你將能夠刪除每USER_ID所有條目用一個命令DELETEHDEL需要的條目。

也是一個不錯的主意,使用Redis的數據庫數(默認爲0,可用1-15),並把不同的功能在不同的數據庫數量。然後,在情況下,如果你需要消滅的全功能,可以用一個命令FLUSHDB