簡體   English   中英

從Django緩存中刪除所有匹配的鍵

[英]Remove all matching keys from Django cache

我需要遍歷服務器的緩存(即LocMemCache對象),並刪除緩存中以字符串'rl:'開頭的每個鍵。 據我了解,django緩存API提供的唯一功能是獲取,設置和刪除。 這是我正在嘗試做的一個粗略示例:

def clear_ratelimit_cache():
    if any('rl:' in s for s in cache.get(s)): 
        log.info(
            'FOUND SOMETHING') 
        cache.delete(*something else here*)

但是,嘗試執行此操作會給我一個NameError ,指出global name 's' is not defined 還必須注意,緩存不可迭代。 有沒有人以類似的方式使用緩存並提出建議?

一種選擇是在配置中僅為此數據類型擁有一個單獨的命名緩存 ,然后調用其clear()方法。

否則,Django LocMemCache將項目存儲在實例的_cache屬性中的簡單dict中。 由於他們沒有為此提供API,因此您可以直接刪除這些項目:

for key in cache._cache.keys():
    if key.startswith('rl:'):
        del cache._cache[key]

通常免責聲明,這是一個實現細節,不適用於其他緩存類型。

... in s for s in cache.get(s)可能不起作用。 無法確定s可能具有的值。

簡短的答案是,如果不對數據模型進行一些更改,就無法使用標准緩存API來執行此操作。 另一個答案表明,您可以僅對這些值使用單獨的緩存。 另外,您可能有一個緩存鍵,用於存儲以rl:開頭的鍵,因此您知道要刪除的內容。

問題在於,除了對所有鍵進行迭代之外,許多緩存后端實際上沒有找到匹配特定值的緩存鍵的方法。 您可能還是不想這樣做,因為隨着緩存大小的增加,它可能會變得非常昂貴。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM