2015-07-20 6 views
1

Я использую redis для кэширования. Я пытаюсь получить redis кэш-данные из сериализатора.извлечение кеша redis в django rest framework serializer

мой код:

class CocView(APIView): 
""" 
Celery and Redis Usage 
""" 
def get(self,request): 

    data = cache.get('alldata') 
    print "In the Cache",data 
    if not data: 
     print "in the database" 
     data = Coc.objects.values('cache_id', 'username', 'email') 
     test_result=mytask.delay(data) 
     test_result=mytask.delay() 

    serializer = CocSerializer(data, many=True) 
    return Response(serializer.data) 

Я обновляю уже существующие данные в моей базе данных с помощью PUT.

Я передаю данные кэша redis в сериализатор, который не обновляется, но все же он показывает обновленные данные из базы данных.

Это означает, что мой сериализатор автоматически извлекает данные из базы данных. Я не знаю, как это происходит.

В моих settings.py у меня есть следующее промежуточное программное обеспечение для redis.

'django.middleware.cache.UpdateCacheMiddleware', 
'django.contrib.messages.middleware.MessageMiddleware', 
'django.middleware.cache.FetchFromCacheMiddleware', 

В моей task.py у меня есть следующая задача.

from __future__ import absolute_import 
from app.models import Coc 
from app.celery import app 
from django.core.cache import cache 
from app.serializers import * 
from app.views import * 

@app.task 
def mytask(data): 
    try: 
     dataa = data 
     cache.set('alldata', dataa,60*45) 
     return 

    except ValueError: 
     return "error" 

Если у кого есть предложения по поводу его внедрения, пожалуйста, сообщите нам.

ответ

0

Попробуйте это в оболочке

from django.core.cache import cache 

, а затем введите

cache.get('alldata') 

, если он не вернет ни это означает, что ваш кэш не установлен с ключом corrresponding. В этом случае Проведет настройкой кэша с утверждением:

cache.set('alldata') = {<your data>} 

Это позволит установить кэш для вас, а затем он должен работать с приходом данных из кэша.

Данные, которые вы получаете, составляют None или empty, и, следовательно, он запрашивает базу данных каждый раз, когда вы пытаетесь отправить данные сериализатора.

+0

Фактически, мы устанавливаем наш кеш в файл задачи сельдерея. –

+0

Прежде всего, мне нужно понять, в чем причина 'dataa = data': P, в любом случае шутит в стороне, причина, по которой я могу думать о том, что ваш кеш не установлен, потому что ваша задача сельдерея не выполнялась и, следовательно, не могла установить кеш для вас или другая причина, о которой я могу думать, заключается в том, что ваша задача сельдерея могла успешно выполняться, но вы обращались к кешу до того, как задача фактически выполнялась, и, следовательно, вы не получаете никаких данных. Для этого попробуйте установить кеш не как задачу celery, а установить его в каком-то скрипте, а затем попытаться получить доступ. –

Смежные вопросы