1

我正在寻找缓存来自数据库中几个相关表的一些很少更新的数据(具体来说是 MySQL)。我已经尝试使用上述 django 应用程序进行 django ORM 查询集缓存,但偶然发现了一些奇怪的行为:即使它们应该像其他查询一样来自缓存,也会查询一些查询。

我在一组 6 个查询中检索数据,混合任何一个:过滤器、选择相关、预取相关(M2M 关系)、正向和反向关系。只是数据检索,没有更新。这发生在一个专用方法中,出于评估的目的,我从 TestCase 调用了两次。(为了抢占任何潜在问题,评估方法中没有任何类型的事务管理)

我观察到的是重复了 3 个查询 - 一个是来自 prefetch_related 的反向 m2m(而另一个反向 m2m 被缓存),以及两个相当简单的反向管理器查询,即使更改为 ModelName.objects.all 也能保持这种行为() 或对应关系的过滤器。我为寻找某种模式而进行的最后这些试验仅在 johnny-cache 上进行,这对于我的特定场景来说是更可取的,因为它的失效策略。我还尝试以一些通用方式修改该方法,基本上是在黑暗中拍摄,例如删除有问题的查询(所有内容都已缓存),只留下一个有问题的查询(仍未缓存),更改查询顺序(无更改)。

有没有人遇到类似的事情或可以提供一些解释?

4

0 回答 0