分页插件一级缓存和二级缓存
时间: 2023-11-01 21:59:24 浏览: 46
分页插件一级缓存和二级缓存是指在使用分页插件时,插件会自动地对查询结果进行缓存以提高查询的性能。
一级缓存是指在同一个SqlSession中对同一条查询语句的结果进行缓存。当执行相同的查询语句时,如果查询的条件和之前的一致,那么会直接从缓存中获取结果,而不会再次执行查询语句。
二级缓存是指在不同的SqlSession之间对同一条查询语句的结果进行缓存。当执行相同的查询语句时,如果查询的条件和之前的一致,并且之前执行过该查询语句的SqlSession已经关闭,那么会从二级缓存中获取结果,而不会再次执行查询语句。
对于分页插件来说,一级缓存和二级缓存的作用是一样的,都是为了提高查询的性能。分页插件会在查询结果被缓存之前,先检查是否开启了分页功能以及分页参数是否合法。如果开启了分页功能且分页参数合法,那么插件会根据分页参数对查询结果进行分页,并将分页后的结果进行缓存。当再次执行相同的查询语句时,如果查询的条件和之前的一致,那么插件会直接从缓存中获取分页后的结果,而不会再次执行查询语句和分页操作。
相关问题
写一个mybatisplus用redis做二级缓存的代码
以下是一个使用MyBatis Plus和Redis作为二级缓存的示例代码:
1. 配置RedisTemplate
```java
@Configuration
public class RedisConfig {
@Bean
public RedisTemplate<String, Object> redisTemplate(RedisConnectionFactory redisConnectionFactory) {
RedisTemplate<String, Object> redisTemplate = new RedisTemplate<>();
redisTemplate.setConnectionFactory(redisConnectionFactory);
redisTemplate.setKeySerializer(new StringRedisSerializer());
redisTemplate.setValueSerializer(new GenericJackson2JsonRedisSerializer());
redisTemplate.setHashKeySerializer(new StringRedisSerializer());
redisTemplate.setHashValueSerializer(new GenericJackson2JsonRedisSerializer());
return redisTemplate;
}
}
```
2. 配置MyBatis Plus
```java
@Configuration
public class MybatisPlusConfig {
@Bean
public MybatisPlusInterceptor mybatisPlusInterceptor(RedisTemplate<String, Object> redisTemplate) {
MybatisPlusInterceptor interceptor = new MybatisPlusInterceptor();
// 分页插件
interceptor.addInnerInterceptor(new PaginationInnerInterceptor(DbType.MYSQL));
// Redis 二级缓存插件
RedisCache redisCache = new RedisCache(redisTemplate);
Properties properties = new Properties();
properties.setProperty("redisCache.expire", "3600");
properties.setProperty("redisCache.cacheNullObject", "true");
RedisCacheInterceptor redisCacheInterceptor = new RedisCacheInterceptor(redisCache, properties);
interceptor.addInnerInterceptor(redisCacheInterceptor);
return interceptor;
}
@Bean
public ConfigurationCustomizer configurationCustomizer(MybatisPlusInterceptor mybatisPlusInterceptor) {
return configuration -> configuration.addInterceptor(mybatisPlusInterceptor);
}
}
```
3. 使用@CacheNamespace注解开启缓存
```java
@CacheNamespace(implementation = RedisCache.class, eviction = RedisCache.class)
public interface UserMapper extends BaseMapper<User> {
@Cacheable(value = "user:id", key = "#id")
User getUserById(Long id);
@CachePut(value = "user:id", key = "#user.id")
int updateUserById(User user);
@CacheEvict(value = "user:id", key = "#id")
int deleteUserById(Long id);
}
```
在这里,@CacheNamespace注解用于开启Redis缓存,并指定了缓存的实现类和清理策略。
@Cacheable注解用于查询缓存中的数据,@CachePut注解用于更新缓存中的数据,@CacheEvict注解用于删除缓存中的数据。
还可以在@Cacheable注解中指定缓存的名称和缓存的键值,以及在@CachePut和@CacheEvict注解中指定缓存的键值。
注意:在使用Redis作为二级缓存时,需要在mapper中使用@Cacheable注解进行数据的缓存和查询,同时要保证实体类的序列化和反序列化能够正确进行。
mybatisplus 缓存
Mybatis-Plus是一个Mybatis框架的增强插件,它提供了简单的配置和快速进行CRUD操作的功能。在Mybatis-Plus中,缓存级别分为一级缓存和二级缓存。
一级缓存是Mybatis框架默认开启的,它是指在同一个SqlSession中,如果执行相同的查询语句,那么Mybatis会将查询结果缓存起来,下次执行相同的查询语句时,直接从缓存中获取结果,而不会再次去数据库查询。一级缓存的作用范围是在同一个SqlSession中,当SqlSession被关闭后,缓存也会被清空。
二级缓存是全局缓存,也称为mapper级别的缓存,它可以在多个SqlSession之间共享缓存结果。二级缓存的默认机制是采用PerpetualCache和HashMap存储缓存结果,所以默认是本地缓存。不同之处在于二级缓存的存储作用域是Mapper(Namespace),可以供多个SqlSession共享。可以通过配置来启用二级缓存,并且可以自定义存储源,如Ehcache、Redis等。
总结来说,Mybatis-Plus提供了一级缓存和二级缓存两种缓存级别。一级缓存在同一个SqlSession中有效,而二级缓存在多个SqlSession之间共享。开发人员可以根据具体的需求选择是否启用缓存,并可以自定义缓存的存储源。
: MyBatis包含一个非常强大的查询缓存特性,它可以非常方便地定制和配置缓存。缓存可以极大地提升查询效率。
: Mybatis-Plus是一个Mybatis框架的增强插件,根据官方描述,MP只做增强不做改变。它提供了简单的配置和快速进行CRUD操作的功能,包括代码生成、分页、性能分析等。
: 二级缓存也称为全局缓存,是mapper级别的缓存。它可以在多个SqlSession之间共享缓存结果,存储作用域为Mapper(Namespace)。默认使用PerpetualCache和HashMap存储,可以自定义存储源。