一、整合物料包准备
mybatis-redis: mybatis对于redis的适配包。
二、整合步骤
各种缓存与mybatis的整合步骤都差不多:引入依赖然后编写相关配置即可完成。
- 引入redis.properties
这个是jedis操作redis用到的配置文件
redis.host=127.0.0.1
redis.port=6379
redis.pass=123456
redis.maxIdle=200
redis.maxActive=1024
redis.maxWait=10000
redis.testOnBorrow=true
- 编写相关配置
在需要使用到redis缓存的mapper中加入cache的type。
<cache type="org.mybatis.caches.redis.RedisCache"></cache>
- 编写测试类
@Test
public void testRedis(){
SqlSession sqlSession = null;
try{
sqlSession = getSession();
RedisMapper mapper = sqlSession.getMapper(RedisMapper.class);
Employee e1 = mapper.testRedisCache(1);
System.out.println(e1.getName());
System.out.println("第一次查询完成");
Employee e2 = mapper.testRedisCache(1);
System.out.println("第二次查询完成");
boolean b1 = (e1 == e2);
System.out.println("e1和e2是否相等:" + b1);
}catch (Exception e){
e.printStackTrace();
}finally {
sqlSession.close();
}
}
- 查看测试结果
DEBUG [main] [com.hly.dao.RedisMapper]- Cache Hit Ratio [com.hly.dao.RedisMapper]: 1.0
Lingyu He
第一次查询完成
DEBUG [main] [com.hly.dao.RedisMapper]- Cache Hit Ratio [com.hly.dao.RedisMapper]: 1.0
第二次查询完成
e1和e2是否相等:false
这个是我第二次执行后的结果,可以看到并没有打印sql语句,直接从缓存中获取的结果。从缓存命中率也能看的出来。下面同redis里面的内容验证一下效果。首先看看当前redis中都有哪些key。
127.0.0.1:6379> keys *
1) "com.hly.dao.RedisMapper"
果然,有一个我们编写的RedisMapper全限定名称的key。这个key是什么类型呢?
127.0.0.1:6379> type com.hly.dao.RedisMapper
hash
哦,这是一个hash类型的key-value。那么再看看这个key里面对应的value是什么。
127.0.0.1:6379> hgetall com.hly.dao.RedisMapper
1) "-916113532:3977339002:com.hly.dao.RedisMapper.testRedisCache:0:2147483647:SELECT * FROM tbl_employee where id=?:1:mysql"
2) "\xac\xed\x00\x05sr\x00\x13java.util.ArrayListx\x81\xd2\x1d\x99\xc7a\x9d\x03\x00\x01I\x00\x04sizexp\x00\x00\x00\x01w\x04\x00\x00\x00\x01sr\x00\x17com.hly.entity.Employee\x17\x9d\xd8\xcc\xb6\x1a\x94\x10\x02\x00\x05I\x00\x02idL\x00\ndepartmentt\x00\x1bLcom/hly/entity/Department;L\x00\x05emailt\x00\x12Ljava/lang/String;L\x00\x06genderq\x00~\x00\x04L\x00\x04nameq\x00~\x00\x04xp\x00\x00\x00\x01pt\x00\x0ehhh@webank.comt\x00\x011t\x00\tLingyu Hex"
这个value中只有一对k-v。我们粗略的看下,key是接口方法名+sql语句+查询条件+数据库类型的组合,value的值就是这个语句的执行结果。至此,完成了mybatis与redis之间的整合。
网友评论