springtboot缓存之@CacheEvict

接上一节

@CacheEvict:缓存清除。

应用场景:我们删除了数据库中的数据之后,将缓存也进行删除。

package com.gong.springbootcache.controller;

import com.gong.springbootcache.bean.Employee;
import com.gong.springbootcache.service.EmployeeService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.cache.annotation.CacheEvict;
import org.springframework.cache.annotation.CachePut;
import org.springframework.cache.annotation.Cacheable;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;

@Controller
public class EmployeeController {

    @Autowired
    EmployeeService employeeService;

    //value:指定缓存的名字,每个缓存组件有一个唯一的名字。缓存组件由CacheManager进行管理。
    //key:缓存数据时用到的key,默认使用方法参数的值,1-方法返回值 key =
    //#id也可这么表示:#root.args[0](第一个参数)
    //keyGenerator:指定生成缓存的组件id,使用key或keyGenerator其中一个即可
    //cacheManager,cacheResolver:指定交由哪个缓存管理器,使用其中一个参数即可
    //condition:指定符合条件时才进行缓存
    //unless:当unless指定的条件为true,方法的返回值就不会被缓存
    //sync:是否使用异步模式
    //"#root.methodName+‘[+#id+]‘"
    @Cacheable(value = "emp")
    @ResponseBody
    @RequestMapping("/emp/{id}")
    public Employee getEmp(@PathVariable("id") Integer id){
        Employee emp = employeeService.getEmp(id);
        return emp;
    }

    @CachePut(value = "emp",key="#employee.id")
    @ResponseBody
    @GetMapping("/emp")
    public Employee updateEmp(Employee employee){
        Employee emp =  employeeService.updateEmp(employee);
        return emp;
    }

    @CacheEvict(value = "emp",key = "#id")
    @ResponseBody
    @GetMapping("/emp/del/{id}")
    public String deleteEmp(@PathVariable("id") Integer id){
        employeeService.deleteEmp(id);
        return "删除成功";
    }
}

首先也是查询两次:

第一次发送sql请求,第二次直接从缓存中获取。

然后我们进行删除:

最后再进行一次查询:

查询不到数据,然后我们看控制台:

说明了:缓存中没数据了,同时数据库中的数据也被删除了。

@CacheEvict还有个allEntries属性,默认为false,我们可以将其设置为,清除指定缓存中的所有缓存,这里是emp。

@CacheEvict还有个beforeInvocation属性,默认为false,表示缓存是否在方法执行之前进行清除。默认为false是在方法执行之后执行。

原文地址:https://www.cnblogs.com/xiximayou/p/12291030.html

时间: 2024-11-15 00:22:48

springtboot缓存之@CacheEvict的相关文章

二级缓存EhCache在几种应用技术的配置方法和步骤总结

一:Spring和Ehcache缓存集成 业务问题:如果仓库不经常变动,大量进出库,总是需要查询仓库列表 (列表重复) ,使用缓存优化 ! 阅读spring规范29章节 第一步: 导入ehcache的jar 和 ehcache.xml ehcache-core-2.6.6.jar 需要导入spring-contextsupport 的jar 第二步: 配置自定义缓存区 <cache name=”” > <ehcache xmlns:xsi="http://www.w3.org/

spring EhCache缓存之annotation注解

1.pom.xml中添加ehcache依赖包 <dependency> <groupId>net.sf.ehcache</groupId> <artifactId>ehcache</artifactId> <version>2.9.1</version> </dependency> 2.在classpath下增加ehcache配置文件 ehcache.xml <?xml version="1.0

缓存插件 Spring支持EHCache缓存

Spring仅仅是提供了对缓存的支持,但它并没有任何的缓存功能的实现,spring使用的是第三方的缓存框架来实现缓存的功能.其中,spring对EHCache提供了很好的支持. 在介绍Spring的缓存配置之前,我们先看一下EHCache是如何配置. <?xml version="1.0" encoding="UTF-8" ?> <ehcache> <!-- 定义默认的缓存区,如果在未指定缓存区时,默认使用该缓存区 --> <

Spring笔记——14.Spring3新增加的缓存机制

Spring3.1新增了一种缓存机制,这种缓存机制与Spring容器无缝结合在一起,可以对容器中的任意bean或bean的方法增加缓存.Spring的缓存级别更高,可以在控制器组件或业务逻辑组件级别进行缓存,这样应用完全无需重复调用底层的DAO. 启动Spring缓存 xml中有一个cache命名空间专门用来配置缓存.启动缓存需要在xml中添加如下一行: <cache:annotation-driven chache-manager="缓存管理器ID"/> 该元素指定Spr

SpringMvc Ehcache 实现缓存机制

SpringMvc Ehcache 缓存 环境搭建 在前面的项目中用到的springMvc的maven拷贝过来,加入三个ehcache的包,分别是ehcache-core-2.5.2.jar.ehcache-spring-annotations-1.2.0.jar.guava-13.0.1.jar 项目源码 web.xml <?xml version="1.0" encoding="UTF-8"?> <web-app xmlns:xsi="

Spring Boot 入门之缓存和 NoSQL 篇(四)

原文地址:Spring Boot 入门之缓存和 NoSQL 篇(四) 博客地址:http://www.extlight.com 一.前言 当系统的访问量增大时,相应的数据库的性能就逐渐下降.但是,大多数请求都是在重复的获取相同的数据,如果使用缓存,将结果数据放入其中可以很大程度上减轻数据库的负担,提升系统的响应速度. 本篇将介绍 Spring Boot 中缓存和 NoSQL 的使用.上篇文章<Spring Boot 入门之持久层篇(三)>. 二.整合缓存 Spring Boot 针对不同的缓存

spring集成ehcache本地缓存

1.maven依赖 <!-- ehcache 相关依赖 --> <dependency> <groupId>net.sf.ehcache</groupId> <artifactId>ehcache</artifactId> <version>2.8.2</version> </dependency> ehcache 2.配置ecache.xml配置 <ehcache xmlns:xsi=&qu

spring boot(四)事务与缓存

spring boot事务机制 spring支持声明式事务,用@Tracsational注解在方法上表明该方法需要事务支持.被注解的方法在被调用时开启一个新的事务,当方法无异常结束时,spring会提交这个事务. 属性:propagation,定义事务的生命周期:isolation,隔离,决定事务的完整性:timeout,事务过期时间:readonly,只读事务:rollback,指定哪些异常可以引起事务回滚:norollback,哪些异常不可以引起事务回滚. spring data JPA对所

Springboot整合ehcache缓存

EhCache是一个比较成熟的Java缓存框架,最早从hibernate发展而来, 是进程中的缓存系统,它提供了用内存,磁盘文件存储,以及分布式存储方式等多种灵活的cache管理方案,快速简单. Springboot对ehcache的使用非常支持,所以在Springboot中只需做些配置就可使用,且使用方式也简易. 在你的项目上配置以下几步即可使用 首先,老规矩,pom.xml加依赖; <!-- Spring Boot 缓存支持启动器 --> <dependency> <gr