java项目集成J2Cache(一级缓存ehCache,二级缓存redis) - Go语言中文社区

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参数即可。

 

版权声明:本文来源CSDN,感谢博主原创文章,遵循 CC 4.0 by-sa 版权协议,转载请附上原文出处链接和本声明。
原文链接:https://blog.csdn.net/zc1121667599/article/details/86218096
站方申明:本站部分内容来自社区用户分享,若涉及侵权,请联系站方删除。
  • 发表于 2020-03-08 11:49:43
  • 阅读 ( 1560 )
  • 分类:Redis

0 条评论

请先 登录 后评论

官方社群

GO教程

猜你喜欢