Ehcache 刷新缓存不是周期性的而是有条件的
Posted
技术标签:
【中文标题】Ehcache 刷新缓存不是周期性的而是有条件的【英文标题】:Ehcache Refresh cache not periodically but conditional 【发布时间】:2015-05-14 17:53:31 【问题描述】:我正在使用带有 spring 架构的 ehcache。
现在,我每隔 15 分钟从数据库刷新一次缓存。
@Cacheable(cacheName = "fpodcache",refreshInterval=60000, decoratedCacheType= DecoratedCacheType.REFRESHING_SELF_POPULATING_CACHE)
public List<Account> getAccount(String key)
//Running a database query to fetch the data.
我想要基于条件的缓存刷新,而不是基于时间的缓存刷新。背后有两个原因—— 1. 数据库更新不是很频繁(每天 15 次,但不是固定间隔) 2. 获取和缓存的数据量很大。
因此,我决定维护两个变量 - 数据库中的版本 (version_db) 和缓存中的版本 (version_cache)。我希望设置一个条件,如果(version_db > version_cache)则只刷新缓存,否则不刷新。类似的东西 -
@Cacheable(cacheName = "fpodcache", conditionforrefresh = version_db>version_cache, decoratedCacheType= DecoratedCacheType.REFRESHING_SELF_POPULATING_CACHE)
public List<Account> getAccount(String key)
//Running a database query to fetch the data.
上面代码中 conditionforrefresh = version_db>version_cache 的正确语法是什么?
我如何做到这一点?
【问题讨论】:
【参考方案1】:您可以在刷新逻辑的开头进行检查以进行所需的检查。
如果为 true,则从数据库加载,否则使用现有加载的数据。
@Cacheable(cacheName = "fpodcache",refreshInterval=60000, decoratedCacheType= DecoratedCacheType.REFRESHING_SELF_POPULATING_CACHE)
public List<Account> getAccount(String key)
// Fetch version_db
// Fetch version_cache
// Check if version_db>version_cache
// Is true --> Run a database query to fetch the data.
// Else --> Return existing data
【讨论】:
以上是关于Ehcache 刷新缓存不是周期性的而是有条件的的主要内容,如果未能解决你的问题,请参考以下文章
mybatis0210 mybatis和ehcache缓存框架整合