一级缓存,sqlsession级别,默认开启,数据库会话结束,它就自然消亡,即,sqlsession.close(),会释放掉一级缓存PerpetualCache对象,一级缓存将不可用。
另外,调用了clearCache(),会清空PerpetualCache对象中的数据,但是该对象仍可使用,同时,SqlSession中执行了任何一个update操作(update()、delete()、insert()) ,都会清空PerpetualCache对象的数据,但是该对象可以继续使用。
二级缓存是Application级别的缓存,默认是不开启的,二级缓存需要进行配置,POJO必须是可序列化的。 也就是要求实现Serializable接口,映射XML文件配置配置<cache/>。
注意事项:
所有select语句将会被缓存
所有insert、update和delete语句会刷新缓存
使用默认的Least Recently Used(LRU,最近最少使用的)算法来收回
缓存不会以任何时间顺序来刷新
缓存会存储列表集合或对象(无论查询方法返回什么)的1024个引用
缓存会被视为是read/write(可读/可写)的缓存,意味着对象检索不是共享的,而且可以安全的被调用者修改,不干扰其他调用者或线程所做的潜在修改。