Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/spring-boot/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Caching 数据库中发生更新时刷新的Ehcache_Caching_Spring Boot_Ehcache_Spring 4_Spring Restcontroller - Fatal编程技术网

Caching 数据库中发生更新时刷新的Ehcache

Caching 数据库中发生更新时刷新的Ehcache,caching,spring-boot,ehcache,spring-4,spring-restcontroller,Caching,Spring Boot,Ehcache,Spring 4,Spring Restcontroller,我是Ehcache新手,我的RESTAPI缓存工作正常 <cache name="com.a.b.c.model.Act" maxElementsInMemory="10000" overflowToDisk="false" statistics="true" /> 若我通过查询在数据库中进行任何更新,缓存将不会更新这些更改 如果我通过RESTAPI进行更新,缓存将被刷新 当数据库中发生更改时,如果必须获得缓存刷新,则必须进行哪些更改 使用timeToLiveSeconds或任

我是Ehcache新手,我的RESTAPI缓存工作正常

<cache name="com.a.b.c.model.Act"
maxElementsInMemory="10000" overflowToDisk="false" statistics="true" />

若我通过查询在数据库中进行任何更新,缓存将不会更新这些更改

如果我通过RESTAPI进行更新,缓存将被刷新

当数据库中发生更改时,如果必须获得缓存刷新,则必须进行哪些更改


使用timeToLiveSeconds或任何其他可以完成的配置好吗?

当底层记录系统更改时更新缓存,而不是通过执行缓存的服务方法,这是缓存的典型问题

Ehcache没有提供现成的解决方案,因为这意味着支持所有可以作为记录系统的技术。不仅是数据库,还有web服务,还有程序员能想到的任何东西

但是,如果您的应用程序可以在缓存中保留过时的数据一小段时间,那么过期可能会有所帮助。它有效地将缓存项标记为在一段时间内有效


如果应用程序无法支持缓存中的过时数据,则必须确保更新记录系统的过程也会使缓存失效

当底层记录系统发生更改时更新缓存,而不是通过执行缓存的服务方法,这是缓存的经典问题

Ehcache没有提供现成的解决方案,因为这意味着支持所有可以作为记录系统的技术。不仅是数据库,还有web服务,还有程序员能想到的任何东西

但是,如果您的应用程序可以在缓存中保留过时的数据一小段时间,那么过期可能会有所帮助。它有效地将缓存项标记为在一段时间内有效


如果应用程序无法支持缓存中的过时数据,则必须确保更新记录系统的过程也会使缓存失效

如果升级数据库的代码可以访问Ehcache管理器(相同的VM或分布式持久性),那么最好的解决方案是中断缓存

CacheManager.getInstance().getEhcache("mycache").remove(key);
并让缓存自动刷新

如果您已经处理了更新的对象,还可以使用
put

CacheManager.getInstance().getEhcache("mycache").put(key, updatedObject);

如果您的代码有
CacheEntryFactories
我会让工厂做这项业务(条目创建是集中的,您可以在那里添加更多逻辑)

如果升级数据库的代码可以访问Ehcache管理器(相同的VM或分布式持久性),最好的解决方案是断开缓存

CacheManager.getInstance().getEhcache("mycache").remove(key);
并让缓存自动刷新

如果您已经处理了更新的对象,还可以使用
put

CacheManager.getInstance().getEhcache("mycache").put(key, updatedObject);
如果您的代码有
CacheEntryFactories
我会让工厂来做这项业务(条目创建是集中的,您可以在那里添加更多逻辑)