Sha*_*ays 5 php database caching scalability cakephp
我目前正在开发一个应用程序的基础,并寻找优化性能的方法.我的设置基于CakePHP框架,但我相信我的问题与任何技术堆栈相关,因为它与数据缓存有关.
我们来看一个典型的作者后关系,它由我的数据库中的2个表表示.当我在数据库中查询特定的博客文章时,同时CakePHP中的内置ORM功能也会获取帖子的作者,帖子上的评论等等.所有这些都作为一个大屁股嵌套数组返回,我使用相关博客文章的唯一标识符存储在缓存中.
更新博客帖子时,它是用于销毁帖子的缓存的子播放,并使用下一个请求重新生成它.
但是当主要实体(在这种情况下是博客文章)不是更新时会发生什么,而是一些相关数据呢?例如,可以删除评论,或者作者可以更新他的化身.是否有任何方法(模式)可用于跟踪相关数据的更新,并相应地将更新应用于我的缓存?
我很想知道你是否也遇到过类似的挑战,以及你是如何设法克服障碍的.如果您正在使用另一个堆栈,请随意提供一个抽象的视角.无论如何,您的意见非常感谢,非常感谢!
很简单,缓存条目可以
当相关数据更改时,您应该注意销毁缓存条目(因此,在应用程序层中,除了更新数据之外,您还应该在更新某些表时销毁某些类型的缓存条目;您可以通过硬编码来跟踪依赖关系)。
如果你想聪明一点,你可以让你的缓存对象声明它们的依赖关系,并缓存数据库表的最后更新时间。
那么你可以
您甚至可以将上述内容集成到持久层中。
编辑:
当然,以上内容适用于您想要拥有一致缓存的情况。有时,对于某些数据,您可以放宽一致性要求,并且在某些情况下,简单的 TTL 就足够了(举个简单的例子,如果您的 ttl 为 1 秒,那么您应该不会给用户带来麻烦,并且可以帮助您数据处理;并且随着时间的增加,您可能仍然没问题 - 例如,假设您正在缓存国家 ISO 代码列表;如果您说让我们缓存 86400 秒,您的应用程序可能完全没问题)。
此外,您还可以跟踪向用户呈现信息的时间,例如
这需要从 DB 中额外读取数据 A,但仅在写入时发生。此外,冲突不仅可能因为缓存而发生,还可能因为多个用户试图更改数据而发生(即,它与锁定策略有关)。