Spring自带缓存和缓存注解@Cacheable的使用

简介

Spring缓存注解可以搭配本地缓存和第三方缓存中间件联合使用,Spring缓存自带缓存使用的是ConcurrentHashMap维护的Cache对象。

Spring常用缓存注解

@EnableCaching 开启缓存

@Cacheable 创建缓存,用于定义在方法上面,不存在返回数据并创建缓存,存在则返回缓存的数据。

@CachePut 更新缓存

@CacheEvict 删除缓存

SpringBoot 使用

Service类

import lombok.AllArgsConstructor;
import lombok.Data;
import org.springframework.cache.annotation.CacheEvict;
import org.springframework.cache.annotation.CachePut;
import org.springframework.cache.annotation.Cacheable;
import org.springframework.cache.annotation.EnableCaching;
import org.springframework.stereotype.Service;

import java.util.ArrayList;
import java.util.List;

@Service
// 应该写在启动类
@EnableCaching
public class UserService {

    @Data
    @AllArgsConstructor
    public static class User {
        private String name;
        private Integer age;
    }

    // 模拟数据库
    List<User> user = new ArrayList<>();

    @CachePut(value = "user", key = "#name")
    public void add (String name, Integer age) {
        user.add(new User(name, age));
    }

    @CacheEvict(value = "user", key = "#name")
    public void delete (String name) {
        // 删除逻辑
    }

    @CachePut(value = "user", key = "#name")
    public void update (String name, Integer age) {
        // 修改逻辑
    }

    @Cacheable("user")
    public List<User> query(){
        System.out.println("查询数据库");
        return user;
    }
}

测试类

@SpringBootTest
public class Test {

    @Autowired
    private UserService userService;

    @org.junit.jupiter.api.Test
    public void test(){
        // 插入数据
        userService.add("terry", 18);
        // 插入数据
        userService.add("terry2", 28);
        // 第一次查询查数据库
        System.out.println(userService.query());
        // 第二次查询查缓存
        System.out.println(userService.query());
    }
}

打印日志:

查询数据库
[UserService.User(name=terry, age=18), UserService.User(name=terry2, age=28)]
[UserService.User(name=terry, age=18), UserService.User(name=terry2, age=28)]

你可能感兴趣的:(SpringBoot,spring,缓存,java)