我广泛阅读了有关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 底线是,如何尽可能地使该查询高效?
我倾向于以下做法:
- 更新查询中包含的任何数据时,移除缓存。 - 首次调用查询时进行缓存。 - 在两次更新之间调用同一查询时检索缓存。
我走在正确的道路上吗?