1. ホーム
  2. python

[解決済み] Redis Python - 特定のパターンに従ってすべてのキーを削除する方法 pythonで、pythonのイテレーションなし

2022-02-15 09:26:44

質問内容

私は、redis のキャッシュの一部を処理するための django 管理コマンドを作成しています。基本的に、私は特定のパターン(例えば、 "prefix:*")に一致するすべてのキーを選択し、それらを削除する必要があります。

cliでできることは知っています。

redis-cli KEYS "prefix:*" | xargs redis-cli DEL

しかし、これをアプリの中から行う必要があるのです。そこで、pythonのバインディングを使う必要があります(私はpy-redisを使っています)。私はリストをdeleteに送り込もうとしましたが、失敗しました。

from common.redis_client import get_redis_client
cache = get_redis_client()
x = cache.keys('prefix:*') 

x == ['prefix:key1','prefix:key2'] # True

# ♪そして今

cache.delete(x) 

# return 0 ... 何も削除されない

xを反復処理できることは知っている。

for key in x:
   cache.delete(key)

しかし、それではredisの素晴らしいスピードが失われ、その能力を誤って利用してしまうことになります。py-redisで、イテレーションやcliを使わないpythonicな解決策はないのでしょうか?

ありがとうございます。

解決方法は?

と思います。

 for key in x: cache.delete(key)

はなかなかいい感じで簡潔です。 delete は本当に一度に一つのキーを必要とするので、ループする必要があります。

そうでなければ、この 前の質問と回答 は、luaを使った解決策を紹介しています。