快速选择Django中的随机行

时间:2016-01-21 05:33:22

标签: django performance caching random

我有一个视图,它返回与我的一个模型中随机选择的行相关的数据。我知道order_by('?')及其性能问题,我想避免在我看来使用order_by('?')。

因为我模型中的数据变化很少(如果有的话),我考虑在请求之间将整个模型缓存在内存中的方法。我知道我要处理的记录有多少,而且我很容易记住内存。如果模型确实以某种方式改变,我可以在那时重新生成缓存。

我的策略合理吗?如果是这样,我该如何实现它?如果没有,我怎样才能从模型中快速选择一个随机行,如果有的话很少变化?

2 个答案:

答案 0 :(得分:0)

如果你知道对象的id及其范围,你可以随机化id,然后查询数据库

答案 1 :(得分:0)

更好的方法可能是在缓存中保留对象的数量,并在需要时简单地检索一个随机数:

item_number = random.randint(MODEL_COUNT)
MyModel.objects.all()[item_number]