Кэш базы данных Django не хранит значение - PullRequest
0 голосов
/ 08 мая 2018

У меня проблема с использованием DatabaseCache в django в представлении. Кажется, я не получаю доступ к кешу базы данных, и сохранение новых значений в кеше не вызывает проблем.

В settings.py Я поставил настройки для кеша:

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

В моем приложении учетных записей В моем 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 , и я могу хранить вещи в базе данных, даже если caches.all () иногда возвращает пустой словарь, а иногда нет. Когда я делаю это, я вижу, что кэши появляются в таблице кэшей в mysql.

Я использую Django 1.11

У вас есть идеи по этому поводу?

Заранее спасибо!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...