系统集成j2cache
J2Cache 是 OSChina 目前正在使用的两级缓存框架(要求至少 Java 8)。第一级缓存使用内存(同时支持 Ehcache 2.x、Ehcache 3.x 和 Caffeine),第二级缓存使用 Redis(推荐)/Memcached 。 由于大量的缓存读取会导致 L2 的网络成为整个系统的瓶颈,因此 L1 的目标是降低对 L2 的读取次数。 该缓存框架主要用于集群环境中。单机也可使用,用于避免应用重启导致的缓存冷启动后对后端业务的冲击。
1 从数据库中读取最新数据,依次更新 L1 -> L2 ,发送广播清除某个缓存信息
2 接收到广播(手工清除缓存 & 一级缓存自动失效),从 L1 中清除指定的缓存信息
文档地址:https://gitee.com/ld/J2Cache
api地址:https://apidoc.gitee.com/ld/J2Cache/
视频介绍:http://v.youku.com/v_show/id_XNzAzMTY5MjUy.html
一. 引用 Maven (会自动加载依赖,或见源码core下pom 文件)
<dependency> <groupId>net.oschina.j2cache</groupId> <artifactId>j2cache-core</artifactId> <version>xxxxx</version> </dependency>
二.使用 ehcache 作为一级缓存
首先修改 j2cache.properties 中的 j2cache.L1.provider_class 为 ehcache 或者 ehcache3,然后拷贝 ehcache.xml 或者 ehcache3.xml 到类路径,并配置好缓存,需要在项目中引入对 ehcache 的支持:
<dependency><!-- Ehcache 2.x //--> <groupId>net.sf.ehcache</groupId> <artifactId>ehcache</artifactId> <version>2.10.4</version> </dependency> <dependency><!-- Ehcache 3.x //--> <groupId>org.ehcache</groupId> <artifactId>ehcache</artifactId> <version>3.4.0</version> </dependency>
三.配置文件
拷贝 j2cache.properties 和 caffeine.properties 到你项目的源码目录,并确保这些文件会被编译到项目的 classpath 中。如果你选择了 ehcache 作为一级缓存,需要拷贝 ehcache.xml 或者 ehcache3.xml 到源码目录(后者对应的是 Ehcache 3.x 版本),这些配置文件的模板可以从 https://gitee.com/ld/J2Cache/tree/master/core/resources 这里获取。
四.spring cache 和 j2cache 继承示例代码,spring 配置类
@Configuration @EnableCaching public class MyCacheConfig extends CachingConfigurerSupport { @Override public CacheManager cacheManager() { // 引入配置 J2CacheConfig config = J2CacheConfig.initFromConfig("/j2cache.properties"); // 生成 J2CacheBuilder J2CacheBuilder j2CacheBuilder = J2CacheBuilder.init(config); // 构建适配器 J2CacheSpringCacheManageAdapter j2CacheSpringCacheManageAdapter = new J2CacheSpringCacheManageAdapter(j2CacheBuilder, true); return j2CacheSpringCacheManageAdapter; } }
五.使用
@Caching : @Caching(cacheable = @Cacheable("users"), evict = { @CacheEvict("cache2"),
@Cacheable(value = "appConfigs", key = "'codes_'+#typeCodes"):用于query
对于一个支持缓存的方法,Spring会在其被调用后将其返回值缓存起来,以保证下次利用同样的参数来执行该方法时可以直接从缓存中获取结果,而不需要再次执行该方法
@CachePut 用于save
与@Cacheable不同的是使用@CachePut标注的方法在执行前不会去检查缓存中是否存在之
前执行过的结果,而是每次都会执行该方法,并将执行结果以键值对的形式存入指定缓存中
@CacheEvict(value = "user", key = "#user.id"):用于update
是用来标注在需要清除缓存元素的方法或类上的。当标记在一个类上时表示其中所有的方法
的执行都会触发缓存的清除操作的执行都会触发缓存的清除操作