(spring-data-redis)SSM框架下使用redis作为mybatis的二级缓存
来源:互联网 发布:ubuntu给予文件夹权限 编辑:程序博客网 时间:2024/05/19 04:03
为了使查询更高效所以本文采用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配置
<?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="redisCacheTransfer" 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*FROMt_goods_categoryWHEREid IN (SELECTcategory_idFROMr_goods_categoryWHEREproperty_name_id = #{id})</select></mapper>
在页面上查询一次后
在redis客户端redis-cli.exe 输入keys *
发现查询结果已经存入redis
阅读全文
0 0
- (spring-data-redis)SSM框架下使用redis作为mybatis的二级缓存
- mybatis + spring + redis(二级缓存)整合
- Spring Boot + Mybatis + Redis二级缓存
- Spring Boot + Mybatis + Redis二级缓存
- Spring Boot + Mybatis + Redis二级缓存
- 使用Redis做MyBatis的二级缓存
- 使用Redis做MyBatis的二级缓存
- 使用Redis做MyBatis的二级缓存
- 使用kryo作为spring data redis的序列化器
- 使用Redis Cluster作为MyBatis的二级缓存并使用protostuff序列化数据
- redis作为hibernate的二级缓存
- SpringMVC + MyBatis + Mysql + Redis(作为二级缓存) 配置
- SpringMVC + MyBatis + Mysql + Redis(作为二级缓存) 配置
- SpringMVC + MyBatis + Mysql + Redis(作为二级缓存) 配置
- SpringMVC + MyBatis + Mysql + Redis(作为二级缓存) 配置
- SpringMVC + MyBatis + Mysql + Redis(作为二级缓存) 配置
- SpringMVC + MyBatis + Mysql + Redis(作为二级缓存) 配置
- SpringMVC + MyBatis + Mysql + Redis(作为二级缓存) 配置
- FileProvider的拍照和打开相册功能
- 配置都对,jps查看datanode没有启动,为什么
- 2017 ACM-ICPC 亚洲区(南宁赛区)网络赛 F. Overlapping Rectangles(面积并)
- Java StringBuffer 和 StringBuilder 类
- 发布node项目到npm
- (spring-data-redis)SSM框架下使用redis作为mybatis的二级缓存
- hdu2883 网络流 离散化 建图
- ios-OC和Swift混编调用分类问题
- php单张图片上传插件免刷新,兼容手机,可实现类似微信图片上传的体验
- Java 数组
- Recurrent neural networks deep dive
- C++ MFC / VS2013 之四 对话框:(创建对话框模板和修改对话框属性)
- Linux Shell高级技巧(一)
- 附加数据库失败,操作系统错误 5:"5(拒绝访问。)"的解决办法