美文网首页mybatis
【mybatis】之六:mybatis与redis整合

【mybatis】之六:mybatis与redis整合

作者: 蛋花汤汤 | 来源:发表于2019-01-31 16:37 被阅读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之间的整合。

    相关文章

      网友评论

        本文标题:【mybatis】之六:mybatis与redis整合

        本文链接:https://www.haomeiwen.com/subject/wnfhsqtx.html