hibernate 由数据库中的更改触发的刷新缓存是否可能?

yzuktlbb  于 2022-11-14  发布在  其他
关注(0)|答案(3)|浏览(129)

在我的应用程序中,我使用了Spring、Hibernate和EHCache。问题是数据库正在被另一个应用程序修改。
有没有可能,有没有实现的解决方案来根据一些数据库更改来刷新缓存?我可以使用一些额外的列进行版本控制等。
有什么主意吗?

k75qkfdt

k75qkfdt1#

您正在寻找的是众所周知的Read-Write Through缓存。EhCache支持它。
摘自EhCache文档:
直写缓存是一种缓存模式,其中对缓存的写入会导致对基础资源的写入。缓存充当底层资源的门面。对于这种模式,通常也可以通过缓存进行读取。写后缓存使用相同的客户端API;但是,写操作是异步进行的。Ehcache-2.0引入了直写和写后缓存。虽然文件系统或Web服务客户端可以作为直写缓存的底层,但最常见的底层资源是数据库。
以下是一篇详细的文章:http://www.ehcache.org/documentation/2.8/apis/write-through-caching.html#write-through-and-write-behind-caching-with-the-cachewriter-

toiithl6

toiithl62#

Ehcache不支持这种开箱即用的方案。直写是指更改以相反的方式流动:您的应用程序更新缓存,而缓存在后台将更新推送到数据库。
为了将数据库更新推送到您的应用程序,您必须提出您自己的解决方案。理想的方法是不让两个不同的应用程序访问相同的数据,而是让两个应用程序中的一个通过另一个,这样一个应用程序就可以拥有这组数据。

w80xi6nr

w80xi6nr3#

下面的解决方案用于在每次数据库保存后刷新缓存

@CacheEvict(cacheNames = {"my-cache"}, allEntries = true)
public MyObject save(MyObject object) {
    MyObject myObject = myRepo.save(object);
    CompletableFuture.runAsync(() -> config.loadData());
    return myObject;
}

相关问题