django 第二次请求的queryset缓存会覆盖第一次请求的queryset缓存吗?

def get(self, request):
    #
    # 通过订单表,获取一条未生成佣金的订单
    #
    order = Order.objects.filter(wages__isnull=True).first()
    if order:
        # 根据用户uid生成佣金
        order.wages = get_wages(order.uid)
        # 保存至数据库
        order.save()
    return Response(status=status.HTTP_200_OK)

如上面的请求函数,两次请求同时进行。第二次请求获取到的queryset缓存会替换第一个请求的queryset缓存吗?
两次请求获取到的queryset,缓存的内存地址是一样的吗?
是不是第二次会覆盖第一次的queryset缓存?

阅读 1.7k
1 个回答

你对 queryset 的缓存理解完全错误,如果两个请求可以共享到一个 queryset ,而且还带和 cache 相关的。那获取到的结果必然是绝对错误的。

queryset 的缓存只是你在不发起数据库操作的时候的缓存,即便在同一个请求中,两次一模一样的数据库操作也还是不会使用缓存的,因为使用缓存会导致完全错误的结果。

下面的代码会共有缓存:

queryset = Tweet.model.get(xxx)

for i in queryset:
    pass

for i in queryset:
    pass

下面的代码不会共有缓存:

queryset = Tweet.model.get(xxx)

for i in queryset:
    pass

queryset = Tweet.model.get(xxx)

for i in queryset:
    pass

两个请求不会共享任何东西,都是线程隔离的

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题