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 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接口就行