Introdução e uso do Spring Cache

Índice

1. Introdução ao Spring Cache

1. Anotações comuns para Spring Cache

2. Spring Cache usa etapas de cache redis

1. Adicione dependências

2. Adicionar configuração

3. Use anotações


1. Introdução ao Spring Cache

Spring cache é uma estrutura que implementa funções de cache baseadas em anotações. Você só precisa adicionar uma anotação para implementar o cache.

Função. Spring Cache fornece uma camada de abstração e a camada inferior pode alternar diferentes implementações de cache. Especificamente, CacheManager

Interface para unificar diferentes tecnologias de cache.

CacheManager é uma interface abstrata para várias tecnologias de cache fornecidas pelo Spring.

Diferentes CacheManagers precisam ser implementados para diferentes tecnologias de cache:
 

CacheManager descrever
EhcachecacheManager Usando EhCache como tecnologia de cache
GuavaCacheManager Usando o GuavaCache do Google como tecnologia de cache
RedisCacheManager Usando Redis como tecnologia de cache

1. Anotações comuns para Spring Cache

anotação ilustrar
@EnableCaching Habilitar função de anotação de cache
@Cacheável Antes de o método ser executado, o Spring primeiro verifica se há dados no cache. Se houver dados, ele retorna os dados armazenados em cache diretamente. Se não houver dados, ele chama o método e coloca o valor de retorno do método no cache.
@CachePut Coloque o valor de retorno do método no cache
@CacheEvict Exclua um ou mais dados do cache

No projeto Spring Boot, para usar a tecnologia de cache, você só precisa importar o pacote de dependência da tecnologia de cache relevante para o projeto e usá-lo na classe de inicialização

@EnableCaching pode ativar o suporte de cache.

Por exemplo, para usar Redis como tecnologia de cache, você só precisa importar as coordenadas maven dos dados Spring Redis.

2. Spring Cache usa etapas de cache redis

1. Adicione dependências

         <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-cache</artifactId>
        </dependency>

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-data-redis</artifactId>
        </dependency>

2. Adicionar configuração

spring
  redis:
    host: 172.17.2.94  #ip地址
    port: 6379         #端口
    password: root@123456  #redis密码
    database: 0        #指定数据库
  cache:
    redis:
      time-to-live: 1800000 #设置缓存过期时间,可选

3. Use anotações

Anote a classe de inicialização: @EnableCaching

@Slf4j
@SpringBootApplication
@EnableCaching
public class CacheDemoApplication {
    public static void main(String[] args) {
        SpringApplication.run(CacheDemoApplication.class,args);
        log.info("项目启动成功...");
    }
}

Anotação  @CachePut: Coloque o valor de retorno do método no cache

    /**
     * CachePut:将方法返回值放入缓存
     * value:缓存的名称,每个缓存名称下面可以有多个key
     * key:缓存的key
     */
    //@CachePut(value = "userCache",key = "#result.id")//result带表返回值
    @CachePut(value = "userCache",key = "#user.id")//可以直接获取参数,参数名要保持一致
    @PostMapping
    public User save(User user){
        userService.save(user);
        return user;
    }

key suporta a linguagem de expressão do Spring, que pode calcular dinamicamente o valor da chave e obtê-lo por meio de #, geralmente usando parâmetros #+ diretos

resultado: representa o valor de retorno, você pode obter a chave obtendo o valor de retorno



 

Anotação @CacheEvict: limpe o cache especificado

    /**
     * CacheEvict:清理指定缓存
     * value:缓存的名称,每个缓存名称下面可以有多个key
     * key:缓存的key
     */
    @CacheEvict(value = "userCache",key = "#p0")//p固定写法,0表示下表,第一个参数
    //@CacheEvict(value = "userCache",key = "#root.args[0]")//固定写法,0表示下表,第一个参数
    //@CacheEvict(value = "userCache",key = "#id")//直接获取参数
    @DeleteMapping("/{id}")
    public void delete(@PathVariable Long id){
        userService.removeById(id);
    }
    //@CacheEvict(value = "userCache",key = "#p0.id")//p0第一个参数,id参数的属性
    //@CacheEvict(value = "userCache",key = "#user.id")//直接获取参数属性
    //@CacheEvict(value = "userCache",key = "#root.args[0].id")//获取第一个参数,id参数的属性
    @CacheEvict(value = "userCache",key = "#result.id")//从返回值获取
    @PutMapping
    public User update(User user){
        userService.updateById(user);
        return user;
    }

Anotação @Cacheable: Antes de o método ser executado, o Spring primeiro verifica se há dados no cache. Se houver dados, ele retorna diretamente os dados armazenados em cache. Se não houver dados, ele chama o método e coloca o valor de retorno do método em a cache.

/**
     * Cacheable:在方法执行前spring先查看缓存中是否有数据,如果有数据,则直接返回缓存数据;若没有数据,调用方法并将方法返回值放到缓存中
     * value:缓存的名称,每个缓存名称下面可以有多个key
     * key:缓存的key
     * condition:条件,满足条件时才缓存数据
     * unless:满足条件则不缓存
     */
    @Cacheable(value = "userCache",key = "#id",unless = "#result == null")
    @GetMapping("/{id}")
    public User getById(@PathVariable Long id){
        User user = userService.getById(id);
        return user;
    }

    @Cacheable(value = "userCache",key = "#user.id + '_' + #user.name")//动态拼接key
    @GetMapping("/list")
    public List<User> list(User user){
        LambdaQueryWrapper<User> queryWrapper = new LambdaQueryWrapper<>();
        queryWrapper.eq(user.getId() != null,User::getId,user.getId());
        queryWrapper.eq(user.getName() != null,User::getName,user.getName());
        List<User> list = userService.list(queryWrapper);
        return list;
    }

 

 

Acho que você gosta

Origin blog.csdn.net/qi341500/article/details/129418500
Recomendado
Clasificación