mybatis

【mybatis】之六:mybatis与redis整合

2019-01-31  本文已影响0人  蛋花汤汤

一、整合物料包准备

mybatis-redis: mybatis对于redis的适配包。

二、整合步骤

各种缓存与mybatis的整合步骤都差不多:引入依赖然后编写相关配置即可完成。

  1. 引入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
  1. 编写相关配置
    在需要使用到redis缓存的mapper中加入cache的type。
<cache type="org.mybatis.caches.redis.RedisCache"></cache>
  1. 编写测试类
    @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();
        }
    }
  1. 查看测试结果
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之间的整合。

上一篇下一篇

猜你喜欢

热点阅读