redis的安装http://liuyieyer.iteye.com/blog/2078093
redis的主从高可用 http://liuyieyer.iteye.com/blog/2078095
Mybatis 的使用不多说。
Mybatis为了方便我们扩展缓存定义了一个Cache接口,看看ehcache-mybatis的源码就明白了。我们要使用自己的cache同样的实现Cache接口即可。直接上代码
public class RedisCache implements Cache { private static Log logger = LogFactory.getLog(RedisCache.class); private Jedis redisClient = createClient(); /** The ReadWriteLock. */ private final ReadWriteLock readWriteLock = new ReentrantReadWriteLock(); private String id; public RedisCache(final String id) { if (id == null) { throw new IllegalArgumentException("Cache instances require an ID"); } logger.debug(">>>>>>>>>>>>>>>>>>>>>>>>MybatisRedisCache:id=" + id); this.id = id; } @Override public String getId() { return this.id; } @Override public int getSize() { return Integer.valueOf(redisClient.dbSize().toString()); } @Override public void putObject(Object key, Object value) { logger.debug(">>>>>>>>>>>>>>>>>>>>>>>>putObject:" + key + "=" + value); redisClient.set(SerializeUtil.serialize(key.toString()), SerializeUtil.serialize(value)); } @Override public Object getObject(Object key) { Object value = SerializeUtil.unserialize(redisClient.get(SerializeUtil.serialize(key.toString()))); logger.debug(">>>>>>>>>>>>>>>>>>>>>>>>getObject:" + key + "=" + value); return value; } @Override public Object removeObject(Object key) { return redisClient.expire(SerializeUtil.serialize(key.toString()), 0); } @Override public void clear() { redisClient.flushDB(); } @Override public ReadWriteLock getReadWriteLock() { return readWriteLock; } protected static Jedis createClient() { try { JedisPool pool = new JedisPool(new JedisPoolConfig(), "172.60.0.172"); return pool.getResource(); } catch (Exception e) { e.printStackTrace(); } throw new RuntimeException("初始化连接池错误"); } } class SerializeUtil { public static byte[] serialize(Object object) { ObjectOutputStream oos = null; ByteArrayOutputStream baos = null; try { // 序列化 baos = new ByteArrayOutputStream(); oos = new ObjectOutputStream(baos); oos.writeObject(object); byte[] bytes = baos.toByteArray(); return bytes; } catch (Exception e) { e.printStackTrace(); } return null; } public static Object unserialize(byte[] bytes) { if(bytes == null)return null; ByteArrayInputStream bais = null; try { // 反序列化 bais = new ByteArrayInputStream(bytes); ObjectInputStream ois = new ObjectInputStream(bais); return ois.readObject(); } catch (Exception e) { e.printStackTrace(); } return null; } }
在看ehcache-mybatis的源码 它真正使用cache的方式是通过集成org.apache.ibatis.cache.decorators.LoggingCache 这个类实现的,照猫画虎,直接我们也继承
public class LoggingRedisCache extends LoggingCache { public LoggingRedisCache(String id) { super(new RedisCache(id)); } }
在mapper.xml中添加如下cache标签
<!-- 启用缓存 --> <cache type="cn.seafood.cache.LoggingRedisCache" />
在mybatis的核心文件中开启缓存
<settings> <!-- 这个配置使全局的映射器启用或禁用缓存 --> <setting name="cacheEnabled" value="true" /> <!-- 对于未知的SQL查询,允许返回不同的结果集以达到通用的效果 --> <setting name="multipleResultSetsEnabled" value="true"/> <!-- 配置默认的执行器。SIMPLE 执行器没有什么特别之处。REUSE 执行器重用预处理语句。BATCH 执行器重用语句和批量更新 --> <setting name="defaultExecutorType" value="REUSE" /> <!-- 全局启用或禁用延迟加载。当禁用时,所有关联对象都会即时加载。 --> <setting name="lazyLoadingEnabled" value="false" /> <setting name="aggressiveLazyLoading" value="true" /> <!-- <setting name="enhancementEnabled" value="true"/> --> <!-- 设置超时时间,它决定驱动等待一个数据库响应的时间。 --> <setting name="defaultStatementTimeout" value="25000" /> </settings>
<setting name="lazyLoadingEnabled" value="false" />
<setting name="aggressiveLazyLoading" value="true" />
注意着两个属性,需要把属性延迟加载和关联对象加载给关闭了,不然放进redis中的cglib代理对象,在对数据发生更改的时候,会出错。
相关推荐
mybatis二级缓存 + reads做第三级缓存
springmvc整合Mybatis,Redis;实现将查询的数据进行二级缓存处理
3、自定义redis KEY生成器/CacheManager来管理redis缓存 4、分布式redis-session共享 5、springboot实现初始化加载配置(实现缓存预热)的两种方式 6、二级缓存联合使用 方式一:redis原生方法工具类(RedisService...
基于maven+springmvc+redis+mybatis整合案例框架,主要实现redis的读取案例
SpringMVC+Redis+MyBatis项目,主要实现Redis注释缓存
mybatis与redis的简单整合示例,供大家学习参考,内含完整maven工程。 博客内容地址:https://blog.csdn.net/magi1201/article/details/85635878
基于 SpringBoot 从0搭建一个企业级开发项目,基于SpringBoot 的项目,并集成MyBatis-Plus、Redis、Druid、Logback ,并使用 Redis 配置 MyBatis 二级缓存。
springMVC+mybatis+shiro+redis 项目整合demo。
Maven 、Redis、SpringMVC 、Mybatis整合。纯属学习使用,如发生问题,作者不负任何责任。有异议,请联系1218476693@qq.com
SpringBoot整合Redis源码 mybatis实战源码 封装RedisUtils工具类源码 redis缓存mybatis数据源码
主要介绍了Mybatis-plus基于redis实现二级缓存过程解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
springboot+mybatis+mybatisplus+swagger redis框架整合springboot+mybatis+mybatisplus+swagger redis框架整合springboot+mybatis+mybatisplus+swagger redis框架整合springboot+mybatis+mybatisplus+swagger redis...
基于Vue和SpringBoot的医院门诊预约挂号管理系统,采用Redis作菜单缓存,MyBatis读写MySQL数
springboot整合redis做mybatis的二级缓存,含有自定义key,自定义过期时间,自定义序列化方式
spring框架下整合mybatis和缓存redis
基于Vue和SpringBoot的医院门诊预约挂号管理系统,采用Redis作菜单缓存,MyBatis读写MySQL数据.zip 毕业设计 基于springboot mysql Vue的系统开发,供参考,提供说明材料+源代码 毕业设计 基于springboot mysql ...
该项目范例是使用了SpringBoot+Mybatis+Redis搭建而成,该项目可以下载后直接打开运行,里面包含增加、删除、修改和查询的的范例实现。本人结合网上资源,多方面查询才整合完成;但愿对需要和学习的朋友能有所帮助。
其中包括redis作为mybatis的第三方缓存配置和redis直接操作缓存数据库的集成。说明:将application.properties中数据源的修改成你的配置。若你只想看spring集成redis的操作,则可以将mysql的配置注释掉,将...
使用maven创建spring mvc,整合了redis、swagger2、mybatis,其中数据库连接池使用了Druid,具有强大的监控和扩展功能,swagger提供API接口,可测试接口,此外还整合了mybatis generator,反向生成代码
spring boot+redis+shiro+mybatis+thymeleaf整合框架,引入了缓存,可以使整个项目能快速访问资源,并且提供shiro安全框架保证了资源的安全性。spring boot,mybatis则是现在开发的最新框架技术。并且引入了...