何时使用Doctrine或Symfony缓存?

3

我广泛阅读了有关Doctrine不同缓存选项以及Symfony缓存机制的资料:

Symfony官方文档:https://symfony.com/doc/4.0/components/cache.html

Doctrine官方文档:https://www.doctrine-project.org/projects/doctrine-orm/en/2.6/reference/caching.html

KnP大学(一如既往非常有用):https://knpuniversity.com/screencast/symfony-fundamentals/caching

其他好资源:https://blog.kaliop.com/blog/2014/10/06/doctrine-symfony2-2/

尽管我解释了如何使用缓存系统,但我仍然无法弄清楚何时使用缓存。在哪些情况下缓存非常有用,而在哪些情况下不应使用它。
例如,在我的项目中,我需要从数据库中提取大量数据,并希望对其进行缓存(通过执行具有大量左连接的实体)。这些左连接是通过一个名为cron job的机器人定期更新的,更新频率可以是每小时、每天或每分钟一次。
当启用缓存机制并向用户显示数据时,我不知道如何确保所有数据都得到正确更新。如果数据库被更新了,我是否需要手动从缓存中删除数据,例如通过调用$cacheDriver->delete('my_data');来检查数据是否存在,然后在检索数据时重新保存它们?这样做是否正确?
另外,我应该使用Doctrine Cache还是Symfony 4 Cache?该选择哪一个? 我在另一个SO线程上有一个我想要缓存的查询示例,链接在这里:https://stackoverflow.com/a/51800728/1083453 底线是,如何尽可能地使该查询高效?
我倾向于以下做法:
- 更新查询中包含的任何数据时,移除缓存。 - 首次调用查询时进行缓存。 - 在两次更新之间调用同一查询时检索缓存。
我走在正确的道路上吗?

1
为什么会有负评?你能否评论并帮助我改进一下呢?谢谢。 - Miles M.
1
这个踩票不是我点的,但我能理解为什么会被踩。这个问题模糊而且太宽泛。没有明确的问题陈述,也很难给出一个清晰的答案。我建议重新表达问题,聚焦于一个具体的问题陈述,并尝试调整帖子的内容以适应那个特定问题的范围。 - lxg
谢谢,朋友,非常感激。 - Miles M.
2个回答

3
没有官方规则。有时您可能认为自己在进行优化,但实际上最多只是浪费时间,最糟糕的情况是因为检查缓存及其有效性的过程比查询本身还要长而导致性能下降。
假设您已经对应用程序进行了良好的架构设计(这意味着没有低效操作,您的查询很好且不会加载无用数据等),这真的是一个个案研究。
尝试使用模拟数百个客户端访问应用程序的软件测试页面。您很快就可以确定哪些页面无法处理负载,并且调试器将告诉您哪些查询正在减慢它们的速度。这些查询肯定会从缓存中受益。

1

我也曾经想过同样的问题,然后偶然看到了你的提问。

完全透明:我从未使用过Doctrine结果缓存 :) 其中一个我期望的是,使用Doctrine结果缓存时,您无需费心序列化/反序列化缓存数据。当您尝试缓存并稍后检索复杂实体时,这可能非常方便。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接