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参数即可。
java项目集成J2Cache(一级缓存ehCache,二级缓存redis)相关推荐
- 项目整合一级缓存和二级缓存
Redis+ehCache实现两级缓存 spring boot中集成了spring cache,并有多种缓存方式的实现,如:Redis.Caffeine.JCache.EhCache等等.但如果只用一 ...
- 458、Java框架112 -【MyBatis - 一级缓存、二级缓存】 2020.12.28
目录 0.一级缓存 1.在一个Session里查相同id的数据 2.在不同Session里查相同id的数据 3.二级缓存 4.基于前一个知识点 5.观察无二级缓存 6.启动二级缓存 7.在Catego ...
- java mysql 二级缓存_深入理解MyBatis中的一级缓存与二级缓存
http://blog.csdn.net/weixin_36380516/article/details/73194758 先说缓存,合理使用缓存是优化中最常见的,将从数据库中查询出来的数据放入缓存中 ...
- MyBatis→优缺点、select延迟加载、接口式MyBatis编程、一级缓存、二级缓存、集成Redis自定义缓存、Log4j
MyBatis优缺点 select延迟加载 接口式MyBatis编程 一级缓存 一级缓存原理 一级缓存命中原则 一级缓存销毁 一级缓存避免脏读不可重复读 一级缓存与spring@事务 二级缓存 与一级 ...
- mybatis一级缓存、二级缓存以及集成EnCache、Redis,避免脏读
参考书目:<mybatis从入门到精通> 刘增辉 著 作者GitHub:https://github.com/abel533/MyBatis-Spring-Boot 一级缓存 mybat ...
- java一级缓存二级缓存_一级缓存和二级缓存的理解
首先补充下CPU的知识: CPU也就是中央处理器,相当于计算机的大脑: CPU是一块超大规模的集成电路,是一台计算机的运算核心(Core)和控制核心( Control Unit): CPU功能主要是解 ...
- 【SSH网上商城项目实战16】Hibernate的二级缓存处理首页的热门显示
转自:https://blog.csdn.net/eson_15/article/details/51405911 网上商城首页都有热门商品,那么这些商品的点击率是很高的,当用户点击某个热门商品后需要 ...
- Mybatis缓存机制(一级缓存、二级缓存、三级缓存)
一.含义: 缓存就是内存中的数据,常常来自对数据库查询结果的保存. 使用缓存,我们可以避免频繁与数据库进行交互,从而提高响应速度. Mybatis的缓存分为一级缓存.二级缓存.三级缓存. 一级缓存: ...
- 一级缓存和二级缓存的理解
首先补充下CPU的知识: CPU也就是中央处理器,相当于计算机的大脑: CPU是一块超大规模的集成电路,是一台计算机的运算核心(Core)和控制核心( Control Unit): CPU功能主要是解 ...
- Mybatis一级缓存,二级缓存的实现就是这么简单
介绍 又到了一年面试季,所以打算写一点面试常问的东西,争取说的通俗易懂.面试高级岗,如果你说熟悉Mybatis,下面这些问题基本上都会问 Mybatis插件的实现原理? 如何写一个分页插件? Myba ...
最新文章
- Android开发遇到eclipse运行程序时报timeout
- Linux系统下统计目录及其子目录文件个数
- IIS 网站服务器性能优化指南
- Redis-08Redis数据结构--基数HyperLogLog
- Spring Boot Cache之缓存
- 【Linux使用】Centos 7设置时区与时钟(chrony / ntp /systemd)
- 两波形相位差的计算值_波形相位频率可调DDS信号发生器(设计分享)
- JMX configuration for Tomcat
- matlab 最优化编程,Matlab最优化编程例子
- matlab 机械振动,MATLAB使用教程之用MATLAB仿真机械振动.doc
- luogu p1330封锁阳光大学
- RQNOJ 341 星门跳跃【解题报告】
- 步步为营——局域网调试NAS软路由“PVE+爱快+lede+黑群晖硬盘直通”并移植到宽带网(超详细,上篇)
- 哪些产品需要做3C认证,费用是多少
- 多臂赌博机问题代码实践
- ZigBee 3.0实战教程-Silicon Labs EFR32+EmberZnet-2-01:芯科的硬件解决方案EFR32
- Python 官方的中文文档
- Opencv值core组件(二):感兴趣区域选取与计算数组加权和
- Windows Server 2012 R2 Standard序列号
- 泛微软件服务器,泛微移动平台 服务器设置