J2Cache是一款OSChina 目前正在使用的两级缓存框架。第一级缓存使用 Ehcache,第二级缓存使用 Redis 。由于大量的缓存读取会导致 L2 的网络成为整个系统的瓶颈,因此 L1 的目标是降低对 L2 的读取次数。该缓存框架主要用于集群环境中。单机也可使用,用于避免应用重启导致的 Ehcache 缓存数据丢失。

之前发了2.3.14 版本,只是根据用户反馈的异常来增加了默认构造函数,而 setter 方法的缺失产生的问题更为严重,它不会报错,而是直接让功能失效!现在再次紧急发布修复版本 2.3.15。

<dependency>
<groupId>net.oschina.j2cache</groupId>
<artifactId>j2cache-core</artifactId>
<version>2.3.15-release</version>
</dependency>

新版本包含的改进如下:

Spring Boot 模块关于 redis 数据读写的 bug 修复

处理了一些代码上的 Bad smell (这些问题是码云自带的代码质量检测发现的问题)

J2Cache数据读取流程

每次读数据的时候首先从Ehcache里先读,因为Ehcache在你的内存中。如果有的话直接返回,没有的话就通过通过网络去读redis的数据,如果数据有的话就把它塞到Ehcache里面,再返回。如果redis也没有,这时才读数据库的数据,然后同时把它的数据塞到Ehcache和redis里面,最后返回数据。

清除数据首先是要清除节点。其他节点在收到这个命令的时候,它会清除当前Ehcache里面对应的数据。这样的话清除某一个节点数据,然后通过广播把这数据给其他其他节点,同时也清楚这个数据,这样就保证了整个集群里面的缓存数据是同步的。

因为缓存数据要通过网络传输到redis上,所以我们要求所有的对象都必须是可序列化的。我们最终使用的是FST,因为它速度很快,生成的那个序列号体积也比较小,关键是它对你的项目没有任何侵入性。

测试方法

安装 Redis

修改 core/Java/j2cache.properties 配置使用已安装的 Redis 服务器

执行 build.sh 进行项目编译

运行多个 runtest.sh

直接在 runtest 输入多个命令进行测试

  • 两级缓存框架 J2Cache

下载地址

声明:本站所有文章,如无特殊说明或标注,均为本站原创发布。任何个人或组织,在未征得本站同意时,禁止复制、盗用、采集、发布本站内容到任何网站、书籍等各类媒体平台。如若本站内容侵犯了原著者的合法权益,可联系我们进行处理。