gpt4 book ai didi

java - 如果另一个应用程序在存储(DB)上更改了数据,如何触发应用程序更新缓存?

转载 作者:行者123 更新时间:2023-12-02 01:57:03 24 4
gpt4 key购买 nike

有 2 个 java 应用程序,都使用 ORM 并在自己的缓存中缓存数据。两者都使用相同的数据库。

第一个应用程序更改了数据库中的一些数据,那么如何让第二个应用程序更新其缓存?此类问题有标准解决方案吗?

最佳答案

与其尝试在两个服务器实例之间同步缓存数据,为什么不集中缓存而不是使用 memcached/couchbase 或 redis 之类的东西呢?在我看来,与使用上述提到的缓存服务器集中缓存数据相比,使用像 ehcache 这样的分布式缓存要复杂得多,而且更容易出错。

作为我原来答案的附录,在决定使用哪种缓存方法(在内存中、集中式)时,需要考虑的一件事是正在缓存的数据的波动性。

如果数据存储在数据库中,但在服务器加载后没有更改,那么您甚至不需要服务器之间的同步。只需让他们每个人将这些静态数据从源加载到内存中,然后继续他们快乐的方式做他们所做的事情。数据不会改变,因此无需引入复杂的模式来保持服务器之间的数据同步。

如果数据确实存在一定程度的波动性(比如您正在缓存从数据库中查找的实体数据以便将命中保存到数据库),那么我仍然认为集中式缓存是比内部缓存更好的方法内存分布式和同步缓存。您只需要确保对缓存数据使用适当的过期时间,以允许数据不时自然刷新。此外,您可能希望在特定实体的更新路径中时从集中式存储中删除缓存的数据,然后在下次请求该数据时从缓存中重新加载它。在我看来,这比尝试执行真正的直写式缓存(在其中写入底层存储以及缓存)要好。数据库本身可能会对数据进行调整(例如通过默认未提供的值),并且在这种情况下您的缓存数据可能与数据库中的数据不匹配

关于java - 如果另一个应用程序在存储(DB)上更改了数据,如何触发应用程序更新缓存?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52172259/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com