首页 > 解决方案 > 何时使用 Doctrine 或 Symfony Cache?

问题描述

我一直在广泛阅读 Doctrine 不同的缓存选项以及 symfony 缓存机制:

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

教义官方: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 作业(symfony 命令)调用的机器人定期更新,每小时、每天或每分钟。

我不知道如何确保在启用缓存机制的情况下向用户显示我的所有数据时正确更新?如果数据库得到更新,我是否需要从缓存中删除数据,例如$cacheDriver->delete('my_data’);在更新时手动调用并检查数据是否存在,然后在检索数据时重新保存?这是正确的方法吗?

另外,我应该使用 Doctrine Cache 还是 Symfony 4 缓存?选择哪一个?我有一个我想缓存在另一个 SO 线程上的查询示例:https ://stackoverflow.com/a/51800728/1083453

底线是,如何使查询尽可能高效?

我倾向于以下内容: - 更新查询中包含的任何数据时删除缓存。- 第一次调用查询时缓存它 - 每当在两次更新之间调用相同的查询时检索它

我在正确的道路上吗?

非常感谢任何帮助或建议。

谢谢

标签: phpsymfonycachingdoctrine-ormdoctrine

解决方案


没有官方规定。有时您可能会认为您正在做优化,而在最好的情况下您正在浪费时间,而在最坏的情况下您正在失去性能,因为检查您是否有缓存以及它是否有效的过程比查询本身要长。

假设您在构建应用程序方面做得足够好(这意味着没有无效的操作,您的查询做得很好并且不会加载无用的数据等),这实际上是一个案例研究。

尝试使用模拟数百个客户端访问它的软件来测试应用程序的页面。您很快就会确定哪些页面无法处理费用,并且调试器会告诉您哪些查询正在减慢它们的速度。这些肯定会从缓存中受益。


推荐阅读