1 概述
EhCachePlugin 是 JFinal 集成的缓存插件,通过使用 EhCachePlugin 可以提高系统的并发访问速度。
2 EhCachePlugin
EhCachePlugin 是作为 JFinal 的 Plugin 而存在的,所以使用时需要在 JFinalConfig 中配置EhCachePlugin,以下是 Plugin 配置示例代码:
3 CacheInterceptor
CacheInterceptor 可以将 action 所需数据全部缓存起来,下次请求到来时如果 cache 存在则直接使用数据并 render,而不会去调用 action。此用法可使 action 完全不受 cache 相关代码所污染,即插即用,以下是示例代码:
上例中的用法将使用 actionKey 作为 cacheName,在使用之前需要在 ehcache.xml 中配置以actionKey 命名的 cache 如:<cache name="/blog/list" …>,注意 actionKey 作为 cacheName 配置时斜杠”/”不能省略。此外 CacheInterceptor 还可以与 CacheName 注解配合使用,以此来取代默认的 actionKey 作为 actionName,以下是示例代码:
以上用法需要在ehcache.xml中配置名为blogList的cache如:<cache name="blogList" …>。
4 EvictInterceptor
EvictInterceptor 可以根据 CacheName 注解自动清除缓存。以下是示例代码:
上例中的用法将清除 cacheName 为 blogList 的缓存数据,与其配合的 CacheInterceptor 会自动更新 cacheName 为 blogList 的缓存数据。
5 CacheKit
CacheKit 是缓存操作工具类,以下是示例代码:
CacheKit 中最重要的两个方法是get(String cacheName, Object key)与put(String cacheName, Object key, Object value)。get 方法是从 cache 中取数据,put 方法是将数据放入 cache。参数cacheName 与 ehcache.xml 中的<cache name="blog" …>name 属性值对应;参数 key 是指取值用到的 key;参数 value 是被缓存的数据。
以下代码是 CacheKit 中重载的 CacheKit.get(String, String, IDataLoader)方法使用示例:
CacheKit.get 方法提供了一个 IDataLoader 接口,该接口中的 load()方法在缓存值不存在时才会被调用。该方法的具体操作流程是:首先以 cacheName=blog 以及 key=blogList 为参数去缓存取数据,如果缓存中数据存在就直接返回该数据,不存在则调用 IDataLoader.load()方法来获取数据。
6 ehcache.xml 简介
EhCache 的使用需要有 ehcache.xml 配置文件支持,该配置文件中配置了很多 cache 节点,每个 cache 节点会配置一个 name 属性,例如:<cache name="blog" …>,该属性是 CacheKit取值所必须的。其它配置项如 eternal、 overflowToDisk、timeToIdleSeconds、timeToLiveSeconds 详见 EhCache 官方文档。