(spring-data-redis)SSM框架下使用redis作为mybatis的二级缓存
2017-10-02 15:14
906 查看
为了使查询更高效所以本文采用redis作为二级缓存
开发环境:maven3.5+eclipse4.5.2+jdk1.7+tomcat1.7
操作系统:win7 64
spring 4.2.4 mybatis 3.4.2 spring-data-redis 1.6.2
redis如果没有linux服务器或者虚拟机(关于linux安装redis请查看文章)
可以下载一个window版 下载地址 https://github.com/MicrosoftArchive/redis/releases
设置redis密码
下载解压后。打开 redis.windows-service.conf 的文件
修改#requirepass foobared
requirepass 123456 及开启redis权限密码为123456
cmd命令到redis跟路径,redis-server.exe redis.windows-service.conf 启动redis服务端
另外再打开一个cmd命令到redis跟路径,redis-cli.exe 启动redis客户端,auth 密码(123456) 表示赋了权限
就可以在cmd窗口进行redis的简单key value的操作了
回到正题。进入项目
在pom.xml 添加redis配置
1、添加jar依赖
2、spring配置
添加spring-redis.xml
spring-dataSource.xml
3、创建对应的创建RedisCache类
创建RedisCacheTransfer类
4、在需要缓存的Mapper.xml配置文件中开启二级缓存
在页面上查询一次后
在redis客户端redis-cli.exe 输入keys *
发现查询结果已经存入redis
开发环境:maven3.5+eclipse4.5.2+jdk1.7+tomcat1.7
操作系统:win7 64
spring 4.2.4 mybatis 3.4.2 spring-data-redis 1.6.2
redis如果没有linux服务器或者虚拟机(关于linux安装redis请查看文章)
可以下载一个window版 下载地址 https://github.com/MicrosoftArchive/redis/releases
设置redis密码
下载解压后。打开 redis.windows-service.conf 的文件
修改#requirepass foobared
requirepass 123456 及开启redis权限密码为123456
cmd命令到redis跟路径,redis-server.exe redis.windows-service.conf 启动redis服务端
另外再打开一个cmd命令到redis跟路径,redis-cli.exe 启动redis客户端,auth 密码(123456) 表示赋了权限
就可以在cmd窗口进行redis的简单key value的操作了
回到正题。进入项目
在pom.xml 添加redis配置
1、添加jar依赖
<jedis.verison>2.6.2</jedis.verison> <spring-data-redis.version>1.6.2.RELEASE</spring-data-redis.version>
<dependency> <groupId>org.springframework.data</groupId> <artifactId>spring-data-redis</artifactId> <version>${spring-data-redis.version}</version> <exclusions> <exclusion> <artifactId>log4j</artifactId> <groupId>log4j</groupId> </exclusion> <exclusion> <artifactId>slf4j-log4j12</artifactId> <groupId>org.slf4j</groupId> </exclusion> </exclusions> </dependency> <dependency> <groupId>redis.clients</groupId> <artifactId>jedis</artifactId> <version>${jedis.verison}</version> </dependency>
2、spring配置
添加spring-redis.xml
<?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:p="http://www.springframework.org/schema/p" xmlns:context="http://www.springframework.org/schema/context" xmlns:mongo="http://www.springframework.org/schema/data/mongo" xsi:schemaLocation=" http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd http://www.springframework.org/schema/data/mongo http://www.springframework.org/schema/data/mongo/spring-mongo.xsd "> <bean id="poolConfig" class="redis.clients.jedis.JedisPoolConfig"> <property name="maxIdle" value="${redis.maxIdle}" /> <property name="maxWaitMillis" value="${redis.maxWaitMillis}" /> <property name="testOnBorrow" value="${redis.testOnBorrow}" /> </bean> <bean id="jedisConnectionFactory" class="org.springframework.data.redis.connection.jedis.JedisConnectionFactory" p:host-name="${redis.host}" p:port="${redis.port}" p:password="${redis.password}" p:pool-config-ref="poolConfig" /> <!-- 使用中间类解决RedisCache.jedisConnectionFactory的静态注入,从而使MyBatis实现第三方缓存 --> <bean id="red 4000 isCacheTransfer" class="cn.erp.commons.cache.RedisCacheTransfer"> <property name="jedisConnectionFactory" ref="jedisConnectionFactory"/> </bean> </beans>
spring-dataSource.xml
<!-- 创建SQLSESSIONFACTYORY,同时制定数据源 --> <bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean"> <property name="dataSource" ref="dataSource" /> <property name="mapperLocations" value="classpath:mapper/**/*.xml"/> <property name="plugins"> <array> <bean class="com.github.pagehelper.PageHelper"> <property name="properties"> <value> dialect=mysql </value> </property> </bean> </array> </property> <!-- 开启缓存支持 --> <property name="configurationProperties"> <props> <prop key="cacheEnabled">true</prop> <!-- 查询时,关闭关联对象即时加载以提高性能 --> <prop key="lazyLoadingEnabled">false</prop> <!-- 设置关联对象加载的形态,此处为按需加载字段(加载字段由SQL指定),不会加载关联表的所有字段,以提高性能 --> <prop key="aggressiveLazyLoading">true</prop> <!-- 对于未知的SQL查询,允许返回不同的结果集以达到通用的效果 --> <prop key="multipleResultSetsEnabled">true</prop> <!-- 允许使用列标签代替列名 --> <prop key="useColumnLabel">true</prop> <!-- 允许使用自定义的主键值(比如由程序生成的UUID 32位编码作为键值),数据表的PK生成策略将被覆盖 --> <prop key="useGeneratedKeys">true</prop> <!-- 给予被嵌套的resultMap以字段-属性的映射支持 --> <prop key="autoMappingBehavior">FULL</prop> <!-- 对于批量更新操作缓存SQL以提高性能 --> <prop key="defaultExecutorType">BATCH</prop> <!-- 数据库超过25000秒仍未响应则超时 --> <prop key="defaultStatementTimeout">25000</prop> </props> </property> </bean>
3、创建对应的创建RedisCache类
/** * 使用第三方内存数据库Redis作为二级缓存 * @author leeclick * 2017-10-02 15:00:36 */ public class RedisCache implements Cache { private static final Logger logger = LoggerFactory.getLogger(RedisCache.class); private static JedisConnectionFactory jedisConnectionFactory; private final String id; /** * The {@code ReadWriteLock}. */ private final ReadWriteLock readWriteLock = new ReentrantReadWriteLock(); 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 void clear() { JedisConnection connection = null; try { connection = jedisConnectionFactory.getConnection(); connection.flushDb(); connection.flushAll(); } catch (JedisConnectionException e) { e.printStackTrace(); } finally { if (connection != null) { connection.close(); } } } @Override public String getId() { return this.id; } @Override public Object getObject(Object key) { Object result = null; JedisConnection connection = null; try { connection = jedisConnectionFactory.getConnection(); RedisSerializer<Object> serializer = new JdkSerializationRedisSerializer(); result = serializer.deserialize(connection.get(serializer.serialize(key))); } catch (JedisConnectionException e) { e.printStackTrace(); } finally { if (connection != null) { connection.close(); } } return result; } @Override public ReadWriteLock getReadWriteLock() { return this.readWriteLock; } @Override public int getSize() { int result = 0; JedisConnection connection = null; try { connection = jedisConnectionFactory.getConnection(); result = Integer.valueOf(connection.dbSize().toString()); } catch (JedisConnectionException e) { e.printStackTrace(); } finally { if (connection != null) { connection.close(); } } return result; } @Override public void putObject(Object key, Object value) { JedisConnection connection = null; try { connection = jedisConnectionFactory.getConnection(); RedisSerializer<Object> serializer = new JdkSerializationRedisSerializer(); connection.set(serializer.serialize(key), serializer.serialize(value)); } catch (JedisConnectionException e) { e.printStackTrace(); } finally { if (connection != null) { connection.close(); } } } @Override public Object removeObject(Object key) { JedisConnection connection = null; Object result = null; try { connection = jedisConnectionFactory.getConnection(); RedisSerializer<Object> serializer = new JdkSerializationRedisSerializer(); result =connection.expire(serializer.serialize(key), 0); } catch (JedisConnectionException e) { e.printStackTrace(); } finally { if (connection != null) { connection.close(); } } return result; } public static void setJedisConnectionFactory(JedisConnectionFactory jedisConnectionFactory) { RedisCache.jedisConnectionFactory = jedisConnectionFactory; } }
创建RedisCacheTransfer类
/** * * 静态注入中间类 * @author leeclick * 2017-10-02 15:02:44 */ public class RedisCacheTransfer { @Autowired public void setJedisConnectionFactory(JedisConnectionFactory jedisConnectionFactory) { RedisCache.setJedisConnectionFactory(jedisConnectionFactory); } }
4、在需要缓存的Mapper.xml配置文件中开启二级缓存
<?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd" > <mapper namespace="cn.hlhdj.duoji.erp.model.dao.goods.CategoryMapper" > <cache type="cn.erp.commons.cache.RedisCache"/> <select id="findbyPropertyNameId" parameterType="int" resultType="cn.erp.model.entity.goods.Category"> SELECT * FROM t_goods_category WHERE id IN ( SELECT category_id FROM r_goods_category WHERE property_name_id = #{id} ) </select> </mapper>
在页面上查询一次后
在redis客户端redis-cli.exe 输入keys *
发现查询结果已经存入redis
相关文章推荐
- SpringBank 开发日志 Mybatis 使用redis 作为二级缓存时,无法通过cacheEnabled=false 将其关闭
- SpringBoot+Mybatis项目使用Redis做Mybatis的二级缓存的方法
- SSM框架——Spring+SpringMVC+Mybatis的搭建教程 一:概述 SSM框架在项目开发中经常使用到,相比于SSH框架,它在仅几年的开发中运用的更加广泛。 Spring作为一个轻量级
- SpringMVC + MyBatis + Mysql + Redis(作为二级缓存) 配置
- SpringMVC + MyBatis + Mysql + Redis(作为二级缓存) 配置
- SpringMVC + MyBatis + Mysql + Redis(作为二级缓存) 配置
- spring,springmvc,mybatis整合redis,redis作为缓存使用
- SpringMVC + MyBatis + Mysql + Redis(作为二级缓存) 配置
- mybatis整合redies,使用redis作为二级缓存
- 使用redis作为mybatis的二级缓存
- SSM框架day02-MyBatis——059 查询缓存管理-增删改对二级缓存的影响、060 查询缓存管理-二级缓存的配置、061 查询缓存管理-二级缓存的使用原则
- 3-SSM框架整合Redis做MyBatis二级缓存
- SpringMVC + MyBatis + Mysql + Redis(作为二级缓存) 配置
- SpringBoot+Mybatis项目使用Redis做Mybatis的二级缓存
- SpringMVC + MyBatis + Mysql + Redis(作为二级缓存) 配置
- 详解Spring boot使用Redis集群替换mybatis二级缓存
- SpringMVC + MyBatis + Mysql + Redis(作为二级缓存) 配置
- SpringMVC + MyBatis + Mysql + Redis(作为二级缓存) 配置
- SpringMVC + MyBatis + Mysql + Redis(作为二级缓存) 配置
- SpringMVC + MyBatis + Mysql + Redis(作为二级缓存) 配置