Mybatis—学习过程—Mybatis缓存之使用redis实现二级缓存
Mybatis自带的二级缓存适合单机结构。单机结构下,使用自带的二级缓存实现类即可
- 在mapper.xml中会发现
<cache></cache>
的空的缓存标签, - 其实在里面可以配置
<cachetype="org.apache.ibatis.cache.impl.PerpetualCache"></cache>
- 而且Mybatis的二级缓存是基于PerpetualCache这个类实现的,这个类是Mybatis默认实现缓存功能的类。我们不写type就使用Mybatis默认的缓存,也可以通过实现Cache接口来自定义缓存。
-
PerpetualCache
这个类就在Mybatis包下,顺着这个包下的路径org.apache.ibatis.cache.impl.PerpetualCache
去寻找这个类时,经过了一个cache
包,看到里面有一个接口Cache
,自定义缓存都是通过实现这个接口来的 - 找到这个类
PerpetualCache
之后发现他就是实现Cache
接口的,而且缓存对象cache
就是一个HashMap对象,所以说Mybatis自带的二级缓存也是HashMap结构 - 代码示例:
//@CacheNamespace:这个注解表示开启二级缓存,是标注在mapper接口上的
//implementation:这个属性表示当前要实现二级缓存的实现类是什么
@CacheNamespace(implementation = RedisCache.class)//开启二级缓存
public interface IUserMapper {
//查询所有用户、同时查询每个用户关联的订单信息
@Select("select * from user")
@Results({
@Result(property = "id",column = "id"),
@Result(property = "username",column = "username"),
@Result(property = "orderList",column = "id",javaType = List.class,
many=@Many(select = "com.lagou.mapper.IOrderMapper.findOrderByUid"))
})
public List<User> findAll();
... ...
Mybatis二级缓存整合Redis
上面介绍了Mybatis自带的二级缓存,但这个缓存是单机模式,不适用于分布式,无法实现分布式缓存
1.什么是分布式缓存
2.Mybatis和Redis进行二级缓存的整合
- 所以说在Mybatis中想使用Redis进行二级缓存,需要先引入
mybatis-redis
包 - 在这个包中可以找到
RedisCache
实现类,通过这个类实现使用Redis实现二级缓存,RedisCache
类是Mybatis提供了一个针对Cache接口的Redis实现类,存在mybatis-redis
包中
3.查看RedisCache
源码
- 无论什么东西实现Mybatis缓存都是实现Mybatis的Cache接口
- redis作为Mybatis的二级缓存使用的是hset数据结构