java项目集成J2Cache(一级缓存ehCache,二级缓存redis)

本文主要记录java项目集成J2Cache并以ehcache作为一级缓存,redis作为二级缓存的配置过程。(以下内容仅个人观点)

首先介绍下已有项目情况,已有项目为ssm框架,已集成ehcache功能即目前项目后台已使用ehcache缓存存储数据,在此基础上进行J2Cache集成。

1、准备工作:

(1)首先根据情况引入J2Cache功能,视情况而定可以引入对应jar包,也可以手动把对应功能包 放入项目中(需要引入功能必须其他jar包),本项目使用grale引入对应jar包j2cache-core 2.7.7-release;

(2)若无ehcache,则需引入ehcache的对应jar包,目前ehcache已有3.x,本项目使用的依旧是2.x,配置过程类似,只是配置文件有些许差异。

(3)准备redis,若为linix服务器可直接百度下载最新功能,目前是5.x,本项目使用window系统,故使用3.x版本的redis服务,配置信息类似。

2、集成过程:

(1)引入J2Cache,本项目引入对应jar包,按需求进行选择,也可手动将J2Cache相关功能代码放入项目中然后引入该部分代码需要的jar包。

(在此对比下两种方式的优劣:引入jar包的优势在于不用引一堆其他jar包,而且升级换代方便,缺点J2cache相关配置文件j2cache.properties必须放在项目根目录resource下才能生效,很麻烦;手动放代码的优势,想放哪放哪,便于管控,处理问题也比较方便改源码,缺点,需要引一堆jar包)

(2)进行j2cache.properties配置。

-设置j2cache一级、二级缓存类型

-设置ehcache缓存配置文件地址

-设置redis配置信息(channel需要与ehcache中的name一致,hosts为redis服务地址)

配置完成后确认项目已引入ehcache并已启动redis服务,即可进行测试连接。

CacheChannel cache = J2Cache.getChannel();

if (cache != null) {

cache.set("spcp","test","aaa");

CacheObject element = cache.get("spcp", "test");

if (element != null) {

      System.out.println(element.getValue());

}

}

无误即表示集成成功

 

3、使用过程中遇到的问题

(1)ehcache使用出错:another unnamed CacheManager already exists in the same VM

首先本项目使用shiro,故已经引入shiro-ehcache-1.2.3的jar包,同时为了使用ehcache又引入了net.sf.ehcache-2.10.6的jar包,导致系统中引入了两个版本的ehcache-core,在使用ehcache存储时会出现cacheManager已存在的异常,异常截图如图:

可以看到确实有两个chacheManager包,分别来自shiro-ehcache和ehcache自身,而ehcahce2.5及以上版本不允许同时出现cacheManager。

解决方案:需要将shiro-ehcache的版本降级,改用shiro-ehcache-1.1.0,降版本后问题即可解决。

(2)redis连接异常:

Could not get a resource from the pool;

该异常出现原因是因为通过jedisPool获取对象时发现对象有问题,故抛出异常;

 

解决方式:redis.testOnBorrow = false

将j2cache.properties中的redis.testOnBorrow配置从true改为false,意为当调用borrow Object方法时,不进行有效性检查 ;

 

Connection reset by peer: socket write error;

该异常出现原因是因为redis服务连接异常;

 

检查方式:想要判断是否确实是redis连接问题,需要到redis服务器上进行以下操作

1、检查6379端口是否在redis服务器上开启:

cmd打开命令窗口,输入telnet 你的redis服务器地址 redis端口(例:telnet 172.16.0.11 6379),如果弹出新窗口即表示端口联通成功。

2、检查redis的地址、端口是否允许可用(以下为window系统方式);

到redis服务器上,打开cmd命令窗口,先通过cd命令跳转到redis的根目录,然后使用redis-cli命令跳转到对应ip端口下,输入set,按照规格随意添加一个值

 

出现error即表示redis服务异常

解决方式:

修改redis.windows.conf中的bind信息,将其注释掉,并添加protected-mode no配置。

重启redis,正常情况下即可解决问题,但有些时候配置文件中的protected-mod没有生效,需要手动用cmd修改,跳转到redis下,执行redis-cli命令,手动设置protected-mod参数即可。

 

  • 0
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
J2Cache是OSChina目前正在使用的两级缓存框架(要求至少 Java 8)。第一级缓存使用内存(同时支持 Ehcache 2.x、Ehcache 3.x 和 Caffeine),第二级缓存使用 Redis(推荐)/Memcached。由于大量的缓存读取会导致L2的网络成为整个系统的瓶颈,因此L1的目标是降低对L2的读取次数。该缓存框架主要用于集群环境中。单机也可使用,用于避免应用重启导致的缓存冷启动后对后端业务的冲击。 数据读取: 读取顺序 -> L1 -> L2 -> DB 数据更新 1、从数据库中读取最新数据,依次更新L1 -> L2 ,发送广播清除某个缓存信息 2、接收到广播(手工清除缓存 & 一级缓存自动失效),从L1中清除指定的缓存信息 J2Cache配置: 配置文件位于core/resources目录下,包含三个文件: j2cache.properties J2Cache核心配置文件,可配置两级的缓存Redis服务器、连接池以及缓存广播的方式 caffeine.properties如果一级缓存选用Caffeine ,那么该文件用来配置缓存信息 ehcache.xml Ehcache的配置文件,配置说明请参考Ehcache文档 ehcache3.xml Ehcache3的配置文件,配置说明请参考Ehcache文档 network.xml JGroups网络配置,如果使用JGroups组播的话需要这个文件,一般无需修改 实际使用过程需要将所需的配置文件复制到应用类路径中,如WEB-INF/classes目录。 J2Cache运行时所需jar包请查看core/pom.xml 测试方法: 1、安装Redis 2、git clone https://gitee.com/ld/J2Cache 3、修改core/resource/j2cache.properties配置使用已安装的Redis服务器 4、在命令行中执行mvn package -DskipTests=true进行项目编译 5、打开多个命令行窗口,同时运行runtest.sh 6、在 > 提示符后输入help查看命令,并进行测试

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值