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缓存?
回答:
你对 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
两个请求不会共享任何东西,都是线程隔离的
以上是 django 第二次请求的queryset缓存会覆盖第一次请求的queryset缓存吗? 的全部内容, 来源链接: utcz.com/p/938324.html