上海乐逍遥网络科技有限公司|乐逍遥网站设计|乐逍遥网站建设|乐逍遥建站|php知识|前端技术|后端技术|网站源码|移动开发|网站运营|UI设计|数据库|网站设计|网站开发|小程序|乐逍遥每日一句|乐逍遥福利图片
主页 > 后端开发 > SpringBoot >

spring boot详解(二)

时间:2026-10-15  编辑:

2 SpringBoot——缓存

缓存是指可以进⾏⾼速数据交换的存储器,使⽤它可以更快速的操作和访问数据。

应用程序未加入缓存时,用户访问数据时会直接访问数据库:

spring boot详解(二)


当加入缓存后,可以有效缓解数据库的压力:

spring boot详解(二)


缓存的优点:

(1)Spring中缓存的使用

1)开启缓存
主启动器类上配置@EnableCaching

@SpringBootApplication
@EnableCaching  // 开启缓存
public class MyfirstApplication {
	public static void main(String[] args) {
		SpringApplication.run(MyfirstApplication.class, args);
	}
}

2) 缓存的操作方法:添加、修改、删除

@Cacheable:查询

@CachePut:更新
修改了数据库的某个数据,同时更新缓存

@CacheEvict:删除

spring boot详解(二)

在 Service 层增加三个缓存操作的⽅法:添加缓存、修改缓存、删除缓存,

编写User类

@Data
@NoArgsConstructor
@AllArgsConstructor
public class User {
    public String name;
    public int age;
    public int id;
}

编写service:

@Service
public class UserService {
	//使用缓存查询用户
    @Cacheable(cacheNames = "getuser",key="#id")
    public User getUserById(int id){
        System.out.println("开始根据id查询用户了");
        User user = new User();
        user.setId(id);
        user.setAge(18);
        user.setName("张飞");
        return user;
    }

	//修改缓存中的内容
    @CachePut(cacheNames = "getuser",key="#id")
    public User updateUser(int id,String name){
        User user = new User();
        user.setId(id);
        user.setAge(18);
        user.setName(name);
        return user;
    }
    
	//删除缓存
    @CacheEvict(cacheNames = "getuser",key="#id")
    public boolean delUser(int id){
        return true;
    }

}

编写controller层:

@RestController  //返回响应为json格式
public class UserController {
    @Autowired
    private UserService userService;

    @RequestMapping("/getUser")
    public User getUserById(int id){
        return userService.getUserById(id);
    }

    @RequestMapping("/update")
    public User updateUser(int id,String name){
        return userService.updateUser(id,name);
    }

    @RequestMapping("/del")
    public boolean delUser(int id){
        return userService.delUser(id);
    }
}

调用postman访问http://localhost:8080/getUser?id=1:发现只有第一次调用时后台才打印

开始根据id查询用户了1.

后面不管查询几次其实都是访问的缓存了。

当访问http://localhost:8080/update?id=1&name=刘备后,相当于对缓存中的内容进行了修改,当再访问http://localhost:8080/getUser?id=1时获得的就是修改(数据库中的数据也一同修改)后的数据了。当访问http://localhost:8080/del?id=1后就将缓存删除(数据库中的数据也一同删除)。

(2)Spring中缓存实现原理

Cache 本质上是⽤ ConCurrentMap 的数据结构来实现。

Java Caching定义了5个核心接口

1) CachingProvider定义了创建、配置、获取、管理和控制多个CacheManager。一个应用可以在运行期访问多个CachingProvider。

2) CacheManager定义了创建、配置、获取、管理和控制多个唯一命名的Cache,这些Cache存在于CacheManager的上下文中。一个CacheManager仅被一个CachingProvider所拥有。

3) Cache是一个类似Map的数据结构并临时存储以Key为索引的值。一个Cache仅被一个CacheManager所拥有。

4) Entry是一个存储在Cache中的key-value对.

5) Expiry 每一个存储在Cache中的条目有一个定义的有效期。一旦超过这个时间,条目为过期的状态。一旦过期,条目将不可访问、更新和删除。缓存有效期可以通过ExpiryPolicy设置。

友情链接

返回
顶部