我正在编写一个django管理命令来处理一些redis缓存.基本上,我需要 Select 所有符合特定模式(例如:"前缀:")的键,然后删除它们.

我知道我可以使用CLI来做到这一点:

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

但我需要在应用程序内完成这项工作.所以我需要使用python绑定(我使用的是py redis).我try 将列表输入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) 

#返回0.没有删除任何内容

我知道我可以遍历x:

for key in x:
   cache.delete(key)

但这将失go Redis令人惊叹的速度,并滥用其能力.有没有带y-redis,没有迭代和/或cli的Python解?

谢谢!

推荐答案

我认为

 for key in x: cache.delete(key)

很好,很简洁.delete真的一次只需要一个键,所以你必须循环.

否则,这previous question and answer个选项将指向基于lua的解决方案.

Django相关问答推荐

Django、htmx删除记录并更新

通过从不同模型中提取值来在基于 django 类的视图中传递变量

按下按钮刷新在html文件中显示的变量

int_list_validator在 Django 表单中不起作用

- 不支持的操作数类型:DateField和DateField

django 用一个提交按钮提交两种不同的表单

Django中视图的多个decorator :执行顺序

AngularJS + Django Rest Framework + CORS(CSRF Coo​​kie 没有出现在客户端)

OrderingFilter 没有属性filter_queryset

Django 不调用模型清理方法

使用 sqlite 运行 django 测试

整数的Python正则表达式?

django 管理员操作而不 Select 对象

Django 应用程序中的版本号

Django - 一起为 2 个或更多字段创建唯一的数据库约束

Django模板转换为字符串

Django - 安装 mysqlclient 错误:需要 mysqlclient 1.3.13 或更高版本;你有 0.9.3

Django 在 css 文件中使用背景图像的方法

Django 测试客户端方法覆盖标头

如何从 django 请求中获取完整的 url