Springboot之缓存

依赖

  • 其实这个不用引用,自带
<!-- 缓存 -->
<dependency>
	<groupId>org.springframework.boot</groupId>
	<artifactId>spring-boot-starter-cache</artifactId>
</dependency>

开启缓存

  • EnableCaching
@SpringBootApplication
@EnableCaching
public class Application {
    public static void main(String[] args) {
        SpringApplication.run(Application.class, args);
    }
}

使用

  • Cacheable
@Service
public class DeptServiceImpl extends ServiceImpl<DeptMapper, Dept>
        implements DeptService {
    @Resource
    private DeptMapper mapper;
    @Cacheable(value = "cacheSpace" ,key="#deptno")
    @Override
    public Dept getByDeptCode(Integer deptno) {
        return mapper.getByDeptCode(deptno);
    }
}

更换缓存为redis

  • 引入依赖
<dependency>
	<groupId>org.springframework.boot</groupId>
	<artifactId>spring-boot-starter-data-redis</artifactId>
</dependency>
  • 默认保存的是序列化的实体,这里修改为json
@Configuration
public class RedisConfig {
    @Bean
    public RedisCacheManager redisCacheManager(RedisConnectionFactory factory){
        // 创建Redis的配置对象
        RedisCacheConfiguration redisCacheConfiguration=
                // defaultCacheConfig()方法是用来整合Redis的
                RedisCacheConfiguration.defaultCacheConfig()
                        // 设置缓存的有效时间及自动更新策略,大家可以自行设置缓存的时间
                        .entryTtl( Duration.ofHours(1) )
                        //禁用空值
                        .disableCachingNullValues()
                        // 前缀
                        .prefixCacheNameWith("ssmp_")
                        .serializeValuesWith(RedisSerializationContext.SerializationPair.fromSerializer( new GenericJackson2JsonRedisSerializer(  ) ));
        // 使用GenericJackson2JsonRedisSerializer来序列化和反序列化redis的value值
        return RedisCacheManager.builder(factory).cacheDefaults( redisCacheConfiguration ).build();
    }
}
  • 配置文件 (如果配置了RedisCacheManager,缓存中配置的比如前缀、过期时间会无效)
## 生产环境
server:
  port: 8088
  # 配置静态资源启用 gzip 压缩
  compression:
    enabled: true
    min-response-size: 128
# 配置主数据源
spring:
  jackson:
    date-format: yyyy-MM-dd HH:mm:ss
    time-zone: GMT+8
  datasource:
    druid:
      url: jdbc:oracle:thin:@localhost:1521/orcl
      username: system
      password: manager
      initialSize: 5
      minIdle: 5
      maxActive: 20
      # 配置获取连接等待超时的时间
      maxWait: 60000
  cache:
    # 选择redis作为缓存
    type: redis
    redis:
      # 是否缓存空值
      cache-null-values: false
      # 过期时间
      time-to-live: 60s
      # 是否开启前缀
      use-key-prefix: true
      # 前缀
      key-prefix: ssmp_
  redis:
    host: 127.0.0.1
    port: 6379
mybatis-plus:
  configuration:
    log-impl: org.apache.ibatis.logging.stdout.StdOutImpl
  • 其他的不用动即可 EnableCaching 使用 Cacheable

@Cacheable 和 @CachePut

@Cacheable:只会执行一次,当标记在一个方法上时表示该方法是支持缓存的,Spring会在其被调用后将其返回值缓存起来,以保证下次利用同样的参数来执行该方法时可以直接从缓存中获取结果。
@CachePut:标注的方法在执行前不会去检查缓存中是否存在之前执行过的结果,而是每次都会执行该方法,并将执行结果以键值对的形式存入指定的缓存中。

jetcache

简介

  • jetCache 对SpringCache进行了封装,在原有功能上实现了多级缓存、缓存统计、自动刷新、异步调用、数据报表等功能。
  • 包含本地缓存(LinkedHashMap和Caffeine)和远程缓存(Redis和Tair)

开发步骤

  • 加入依赖
<!-- https://mvnrepository.com/artifact/com.alicp.jetcache/jetcache-starter-redis -->
<dependency>
    <groupId>com.alicp.jetcache</groupId>
    <artifactId>jetcache-starter-redis</artifactId>
    <version>2.7.3</version>
</dependency>
posted @ 2023-03-26 09:01  his365  阅读(138)  评论(0编辑  收藏  举报