我使用redis进行缓存后端。我正在尝试从序列化程序中获取redis缓存数据。
我的代码是:
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 :(得分:0)
在你的shell中试试这个
from django.core.cache import cache
然后输入
cache.get('alldata')
如果它返回none,则意味着您的缓存未使用相应的密钥进行设置。在这种情况下,请使用以下语句设置缓存:
cache.set('alldata') = {<your data>}
这将为您设置缓存,然后它应该使用来自缓存的数据。
您收到的数据将是None
或empty
,因此每次尝试向序列化程序发送数据时都会查询数据库。