二级缓存是什么(二级缓存越大越好吗)

二级缓存是什么

当为select语句的时候,如果没有去配置flushCache、useCache,那么默认是启用缓存的,所以,如果有必要,那么就需要人工修改配置。

二级缓存是什么(二级缓存越大越好吗)

一级缓存是框架默认为我们开启的,我们不需要做任何配置。例如我们首次查询id为1的用户,mybatis会将该用户的对象存储在一级缓存中;如果在此中间sqlSession执行了commit操作(增删改),则mybatis会清空一级缓存的数据,这样就能让我们的数据是最新的,避免产生脏读。当我们再次查id为1的用户时,mybatis就会去缓存中查找,就不需要再从数据库中去查询。

​和一级缓存默认开启不一样,二级缓存需要我们手动开启首先在全局配置文件sqlMapConfig.xml文件中加入如下代码

sqlSession关闭后(close),一级缓存的数据会保存到二级缓存中,新的相同的查询语句就会去二级缓存中去查询。

二级缓存越大越好吗

二级缓存是mapper级别的缓存,多个sqlSession去操作同一个Mapper的sql,不管Sqlsession是否相同,只要mapper的namespace相同就能共享数据。也可以称之为namespace级别的缓存。

当为select语句时:flushCache默认为false,表示任何时候语句被调用,都不会去清空本地缓存和二级缓存。useCache默认为true,表示会将本条语句的结果进行二级缓存。

3,需要将要存储数据的pojo实现Serializable接口,为了将数据取出做反序列化操作,因为二级的缓存的存储方式多种多样,有可能存储在内存中,也可能储存到磁盘中。如果我们要再取这个缓存的话,就需要反序列化了。所以建议mybatis中的pojo都去实现Serializable接口。

二级缓存是Mapper级别的缓存,多个SqlSession去操作同一个Mapper中的SQL语句,则这些SqlSession可以共享二级缓存,即二级缓存是跨SqlSession的。

二级缓存和*缓存哪个重要

mybatis一级缓存是默认开启的,是SqlSession级别的缓存,在操作数据库的时候需要创建一个SqlSession,其中有一个HashMap,用于存储缓存数据。不同的SqlSession之间,其缓存数据的HashMap是不同的;

RedisConfig类继承了JedisPoolConfig,并提供了host,port等属性的包装,简单看?下RedisConfig的属性:

​RedisCache和大家普遍实现Mybatis的缓存方案大同小异,无非是实现Cache接口,并使用jedis操作缓存;不过该项目在设计细节上有一些区别;

​并将该配置文件中的内容设置到RedisConfig对象中,并返回;接下来,就是RedisCache使用RedisConfig类创建完成edisPool;在RedisCache中实现了一个简单的模板方法,用来操作Redis:

标签: 二级缓存

发表评论

访客

◎欢迎参与讨论,请在这里发表您的看法和观点。