我在视图中使用django中的DatabaseCache时遇到问题 . 看起来我无法访问数据库缓存,并且在缓存中存储新值不会发生 .

settings.py 中我已经设置了缓存:

CACHES = {
    'default': {
        'BACKEND': 'django.core.cache.backends.db.DatabaseCache',
        'LOCATION': 'caches',
        'TIMEOUT': 300,
    }
}

在我的应用 accounts 中,我在 views.py 中有以下内容:

from rest_framework.response import Response
from rest_framework.decorators import api_view
from accounts.serializers import UserSerializer
from django.core.cache import cache, caches

@api_view(['GET'])
def current_user(request):
    print("all caches")
    print(caches.all())

    cache_value = cache.get("foo")
    print("cache_value")
    print(cache_value)

    cache.set("foo", "some cached value", 24*60*60)

    cache_value_after_set = cache.get("foo")
    print("cache_value_after_set")
    print(cache_value_after_set)

    serializer = UserSerializer(request.user)
    return Response(serializer.data)

问题是缓存看起来并不“坚持” . 第一次尝试执行cache.get(“foo”)时,它显然会返回None . 当我执行cache.get(“foo”)时 - 在我完成cache.set之后 - 它将返回它应该的值 . 但是当我第二次调用视图时,cache.get(“foo”)返回None .

caches.all()的输出是一个空字典,所以我猜 settings.py 中的缓存设置不会以某种方式在 views.py 中使用 .

第一次和第二次调用视图后的输出是:

all caches
dict_values([])
cache_value
None
cache_value_after_set
some cached value

all caches
dict_values([])
cache_value
some cached value
cache_value_after_set
some cached value

即结果相同,没有设置缓存 .

真正奇怪的是缓存在使用 ./manage.py shell 时工作,我可以将数据存储在数据库中,即使caches.all()有时会返回一个空字典,有时也不会 . 当我这样做时,我可以看到缓存出现在mysql的缓存表中 .

我正在运行Django 1.11

你有什么想法吗?

提前致谢!