【发布时间】:2018-03-12 10:19:03
【问题描述】:
我在 django restframe 工作中使用 redis 并在 get 方法中遇到问题
我用不同的键为多个用户保存数据
@api_view(['GET'])
def abc(request):
key = request.META['HTTP_KEY']
if cache.get(key) == None:
print('create a cache and return data ');
cache.set(key,key,timeout =100)
return JsonResponse({'data': cache.get(key) })
else:
print('return data from cache')
return JsonResponse({'data': cache.get(key) })
它第一次创建缓存并返回数据,当我下次使用不同的键时,它将返回相同的数据事件,它不执行 if else 条件/不打印打印命令。我想它会创建 url 基础缓存,如何解决这个问题?
我第一次按“a”键,它返回 me = a 并打印“创建缓存并返回数据”
下次我使用键 b 时,它会返回旧数据“a”而不打印任何行“创建缓存并返回数据”/“从缓存中返回数据”
【问题讨论】:
-
首先,JsonResponse 是纯 django,与 DRF 无关。其次,您可能没有粘贴代码的相关部分。你的全景图是什么样的?
-
当我发送不同的密钥时,我的问题很简单。为什么我得到与我第一次在缓存中设置的结果相同的结果。这仅在“获取”方法中发生。如果我更改 get to post 那么它将正常工作。
-
这段代码 sn-p 不应该与 POST 一起工作(你应该得到一个 405),也不应该在没有 print 语句的情况下返回任何东西。您是否在设置中设置了 FetchFromCacheMiddleware ?如果是这样,您将不得不使用可变标头 (docs.djangoproject.com/en/2.0/topics/cache/#using-vary-headers)
标签: caching redis get django-rest-framework