mybatis+redis+mybatis-redis实现二级缓存

mybatis-redis源码: https://github.com/mybatis/redis-cache

mybatis-redis官网说明: http://www.mybatis.org/redis-cache/index.html

说明:

1、MyBatis默认开启二级缓存

2、MyBatis默认实现了自己的二级缓存(PerpetualCache),内部使用HashMap实现,无法实现分布式,并且服务器重启后就没有缓存了。

3、MyBatis二级缓存只适用于不常进行增、删、改的数据,比如国家行政区省市区街道数据。一但数据变更,MyBatis会清空缓存。因此二级缓存不适用于经常进行更新的数据。

4、MyBatis二级缓存是按命名空间(namespace)进行缓存的,可以指定某个命名空间下的sql进行缓存

5、MyBatis二级缓存的对象必须实现Serializable接口

 

步骤(以下配置已项目中缓存国家行政区省市区街道数据为例)

1、配置maven

配置jedis和mybatis-redis(实现了mybatis的cache接口的实现类),其他请自行配置(如:mybatis或mybatis-spring-boot-starter)

 

 


        
            redis.clients
            jedis
            2.8.0
        

 


        
            org.mybatis.caches
            mybatis-redis
            1.0.0-beta2
        

 

2、配置redis.properties

mybatis-redis会自动读取redis.properties的配置(感兴趣的可以看源码)

#redis的服务器地址
host=127.0.0.1
#redis的服务端口
port=6379
#链接数据库
default.db=0
#客户端超时时间单位是毫秒
timeout=60000
#最大连接数
maxActive=300
#最大空闲数
maxIdle=100
#最小空闲数
minIdle=1
#最大建立连接等待时间
maxWait=1000
#指明是否在从池中取出连接前进行检验,如果检验失败,则从池中去除连接并尝试取出另一个
testOnBorrow=true
#当调用return Object方法时,进行有效性检查
testOnReturn=true

 

 

 

 

 

3、配置AreaDefaultMapperExt.xml

 





    
    

    
    


注:如果只配置则使用的是mybatis的默认二级缓存

 

如果只配置 则使用redis缓存,其他配置按默认

如果使用了mybatis generator生成了AreaDefaultMapper.xml,由于同一个命名空间只能配置一次缓存,无法在这个xml再配置一个缓存(会抛异常),因此这个xml要配:

 


去引用AreaDefaultMapperExt.xml的缓存

 

 

以上即可

 

QA

Q1:能不能使用注解进行配置?A:能

在dao层的实现层使用@CacheNamespace注解

@CacheNamespace( implementation = org.mybatis.caches.redis.RedisCache.class)

(由于我自己的项目用mybatis代理实现类,没有dao的实现层,所有这个我没测,直接在dao层架注解是没用的)

Q2:能不能自己实现缓存?A:能

MyBatis有提供Cache接口,自己实现Cache接口就行

 

你可能感兴趣的:(mybatis)