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

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

回到顶部