我在Hibernate中使用Ehcache。
如何通知缓存数据库已更改?如何使缓存的数据无效?我如何以编程方式实现这一目标?
答案 0 :(得分:10)
究竟是什么意思?有两种方法可以在数据库中进行更改:在app&在应用程序之外
在应用程序内部,您可以轻松触发失效。第二个是更难解决的问题。缓存元素与密钥一起存储,并且可以根据该密钥将其删除。
CacheManager manager = CacheManager.getInstance();
cache = manager.getCache(cacheName);
cache.remove(key);
or
cache.removeAll();
根据您配置ehcache的方式当然。但是您需要知道保存对象的缓存的名称。
答案 1 :(得分:4)
这就是使所有EhCache项无效的方法,而不必担心单个缓存名称的含义:
CacheManager manager = CacheManager.getInstance();
String[] names = manager.getCacheNames();
for (String name : names)
{
Cache cache = manager.getCache(name);
cache.removeAll();
}
答案 2 :(得分:1)
尝试:
CacheManager.create().clearAll()
它将清除CacheManager中的所有缓存。
要仅清除一个特定缓存,请从缓存管理器中获取并删除所有元素:
CacheManager cacheManager = CacheManager.create();
Ehcache cache = cacheManager.getEhcache(cacheConfiguration.getName());
cache.removeAll();
答案 3 :(得分:1)
设置缓存过期时间,以使数据刷新的频率大于数据库更改的频率。
您还可以仅在缓存中更新数据库中发生更改的元素。
答案 4 :(得分:0)
如果您要删除特定的缓存(例如:employeeCache)
@Autowired
CacheManager cacheManager;
您要使缓存无效的位置,请使用以下代码
Cache cache = cacheManager.getCache("employeeCache");
cache.removeAll();