将redis缓存提取到django rest framework serializer

时间:2015-07-20 07:26:41

标签: django caching serialization redis celery-task

我使用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"

如果有人对此有任何建议,请告诉我们。

1 个答案:

答案 0 :(得分:0)

在你的shell中试试这个

from django.core.cache import cache

然后输入

cache.get('alldata')

如果它返回none,则意味着您的缓存未使用相应的密钥进行设置。在这种情况下,请使用以下语句设置缓存:

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

这将为您设置缓存,然后它应该使用来自缓存的数据。

您收到的数据将是Noneempty,因此每次尝试向序列化程序发送数据时都会查询数据库。