之前说过Lock,ReentrantReadWriteLock是Lock的实现类,可以获取读锁与写锁。这里用ReentrantReadWriteLock做一个简单的缓存系统原理实现。
代码跟注释如下
|
|
mybatis中的缓存
- 一级缓存是SqlSession级别的缓存。在操作数据库时需要构造 sqlSession对象,在对象中有一个数据结构(HashMap)用于存储缓存数据。不同的sqlSession之间的缓存数据区域(HashMap)是互相不影响的。
- 二级缓存是mapper级别的缓存,多个SqlSession去操作同一个Mapper的sql语句,多个SqlSession可以共用二级缓存,二级缓存是跨SqlSession的。二级缓存是以namespace来划分的,一个namespace有一个二级缓存。
一级缓存工作原理
查询时会创建一个唯一的Key。
查询缓存Map中是否有对象
更新时,执行删除缓存数据
一级缓存实现类PerpetualCache类
二级缓存需要单独配置,不做过多说明
mybatis提供了Cache接口,可对接不同的缓存厂商。如redis、memcached、ehcache。