开启二级缓存
mybatis 默认开启一级缓存,同一个sqlsession中相同的操作只会从磁盘上获取一次
作用范围:同一个sqlsession
mybatis plus开启二级缓存只需要两步
1、启动类:@EnableCaching //允许二级缓存
2、需要缓存的service层上面加上注解 如:@Cacheable(value = “SeatPerson”, key = “#areaNo”)
注:key为传入的值,相当于map中的key当下次请求时发现该key存在,不会再去数据库层进行sql查询,直接从缓存中取;
value用于缓存值的对象,当你更换对象后之前缓存对象中的值不能继续拿到,会重新执行sql,存储给新的value对象
service层可用注解如下:
①Cacheable:根据方法的请求参数对其结果进行缓存,多用于查询
②CachePut:执行方法,并缓存结果
③CacheEvict:清空缓存
④Caching:能够同时应用多个缓存注解功能
⑤CacheConfig:用于抽取缓存的公共配置(类级别)
作用范围:namespace (二级缓存是用来解决一级缓存不能跨会话共享的问题的,范围是namespace 级别的,可以被多个SqlSession 共享(只要是同一个接口里面的相同方法,都可以共享))
优先级:二级缓存》一级缓存》查询数据库
(此配置为spring boot+mybatis plus配置,因为springboot的自动装配很大方面借鉴了spi机制,所以配置很方便) spring boot中的 spi机制
缓存解决了那些问题:
1.存在内存中的临时数据
2.将用户经常查询的数据放在缓存(内存)中,用户去查询数据就不用从磁盘上(关系型数据库
数据文件)查询,从缓存中查询,从而提高查询效率,解决了高并发系统的性能问题。
3、减少和数据库的交互次数,减少系统开销,提高系统效率。
什么样的条件需要使用缓存?
经常查询并且不经常改变的数据。
配置缓存时间
@Slf4j
@Configuration
@EnableCaching //启用二级缓存
public class MybatisConfig {
@Bean
public RedisCacheManager cacheManager(RedisConnectionFactory factory) {
RedisCacheConfiguration config = RedisCacheConfiguration.defaultCacheConfig();
Set<String> cacheNames = new HashSet<>();
cacheNames.add("seatPerson");
ConcurrentHashMap<String, RedisCacheConfiguration> configMap = new ConcurrentHashMap<>();
//配置 seatPerson 6秒过期时间
configMap.put("seatPerson", config.entryTtl(Duration.ofSeconds(6L)));
//distributor 的有效期是永久的
configMap.put("distributor", config);
//需要先初始化缓存名称,再初始化其它的配置。
return RedisCacheManager.builder(factory).initialCacheNames(cacheNames).withInitialCacheConfigurations(configMap).build();
}
}