我已经广泛阅读了有关教义的各种不同的缓存选项以及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缓存还是Symfony 4缓存?选择哪一个? 我有一个要在另一个SO线程上缓存的查询示例:https://stackoverflow.com/a/51800728/1083453
最重要的是,如何使该查询尽可能高效?
我倾向于以下几点: -更新查询中包含的任何数据时删除缓存。 -首次调用查询时将其缓存 -在两次更新之间调用相同的查询时检索它
我在正确的道路上吗?
非常感谢您的帮助或建议。
谢谢
答案 0 :(得分:2)
没有官方规定。有时您可能会认为自己在进行优化,因为充其量只是在浪费时间,而在最糟糕的情况下却是在失去性能,因为检查缓存是否有效以及查询是否有效的过程比查询本身更长。
假设您在架构应用程序方面做得足够好(这意味着没有无效的操作,您的查询做得很好并且不会加载无用的数据等),这确实是个案研究。
尝试使用模拟数百个访问它的客户端的软件来测试应用程序的页面。您很快就会确定哪些页面无法处理费用,调试器会告诉您哪些查询使它们变慢。那些肯定会从缓存中受益。
答案 1 :(得分:1)
我想知道同一件事,偶然发现了你的问题。
完全公开:我从未使用过学说结果缓存:) 我期望的一件事是,借助Doctrine结果缓存,您无需费心对缓存的数据进行序列化/反序列化。当您尝试缓存并稍后检索复杂的实体时,这可能会非常方便。