[英]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.