Edu*_*ans 22
对于RedisCache,您可以获得所有可用的键。
from django.core.cache import cache
cache.keys('*')
Run Code Online (Sandbox Code Playgroud)
小智 7
如前所述,无法获取 django 中所有缓存键的列表。如果您使用外部缓存(例如 memcached 或数据库缓存),您可以直接检查外部缓存。
但是,如果您想知道如何将 django 密钥转换为后端系统中使用的密钥,则 django 的make_key()函数将执行此操作。
https://docs.djangoproject.com/en/1.8/topics/cache/#cache-key-transformation
>>> from django.core.cache import caches
>>> caches['default'].make_key('test-key')
u':1:test-key'
Run Code Online (Sandbox Code Playgroud)
小智 7
为了进行调试,您可以暂时切换到LocMemCache而不是PyMemcacheCache:
CACHES = {
'default': {
'BACKEND': 'django.core.cache.backends.locmem.LocMemCache',
'LOCATION': 'unique-snowflake',
}
}
Run Code Online (Sandbox Code Playgroud)
然后看到这个问题:
from django.core.cache.backends import locmem
print(locmem._caches)
Run Code Online (Sandbox Code Playgroud)
我要添加这个答案,因为我遇到了这个SO问题,搜索完全相同的问题,但使用不同的缓存后端。另外,对于 REDIS,特别是如果您为多个应用程序使用相同的 REDIS 服务器,您将需要使用该选项来确定缓存键的范围KEY_PREFIX,否则您最终可能会得到来自另一个应用程序的缓存键。
我的答案是如果您已经进行了设置KEY_PREFIX并且settings.py您正在使用redis_cache.RedisCache或django.core.cache.backends.redis.RedisCache
例如
CACHES = {
"default": {
"BACKEND": "redis_cache.RedisCache",
"LOCATION": f"redis://localhost:6379",
"KEY_PREFIX": "my_prefix",
},
}
Run Code Online (Sandbox Code Playgroud)
或者
CACHES = {
"default": {
"BACKEND": "django.core.cache.backends.redis.RedisCache",
"LOCATION": f"redis://localhost:6379",
"KEY_PREFIX": "my_prefix",
},
}
Run Code Online (Sandbox Code Playgroud)
redis_cache.RedisCachefrom django.conf import settings
from django.core.cache import cache
cache_keys = cache.get_client(1).keys(
f"*{settings.CACHES['default']['KEY_PREFIX']}*"
)
Run Code Online (Sandbox Code Playgroud)
django.core.cache.backends.redis.RedisCache做一些测试表明,使用 Django 内置的 RedisCache 可能已经被限定了范围,但在我的例子中,我这样做是为了明确。调用
.keys("*")还将返回属于 celery 任务的键
from django.conf import settings
from django.core.cache import cache
cache_keys = cache._cache.get_client().keys(
f"*{settings.CACHES['default']['KEY_PREFIX']}*"
)
Run Code Online (Sandbox Code Playgroud)
如果您想清除特定应用程序的缓存而不是REDIS 中的所有键,您将需要使用先前的技术,然后调用cache.delete_many(cache_keys)而不是像Django 文档cache.clear()警告的那样,使用将删除缓存中的所有键,而不仅仅是由您的应用程序创建的。cache.clear()
| 归档时间: |
|
| 查看次数: |
23714 次 |
| 最近记录: |