1
我使用redis作为缓存后端。我正试图从序列化器中获取redis缓存数据。将redis缓存提取到django rest框架串行器
我的代码是:
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)
我更新已经使用把我的数据库中已有的数据。
我正在将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"
如果有人对它的实施有什么建议,请告诉我们。
实际上,我们正在将我们的缓存设置在芹菜任务文件中。 –
首先我需要了解'dataa = data'的原因是什么:P,抛开笑话,我能想到的原因是你的缓存没有设置是因为你的芹菜任务没有运行,因此无法设置缓存为你或我能想到的另一个原因是你的芹菜任务可能已经成功运行,但你在任务实际运行之前访问缓存,因此你得到一个没有数据。为此尝试将缓存设置为不作为芹菜任务,但将其设置为某个脚本,然后尝试访问。 –