专栏首页数据分析与挖掘springtboot缓存之@CacheEvict

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是在方法执行之后执行。

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • springboot缓存之@Caching和@CacheConfig注解

    在执行Localhost:8080/emp/lastName/jack请求之后,会同时将@CachePut缓存规则加入到缓存中。

    绝命生
  • springboot缓存之@Cacheable中常用参数

    我们可以通过key参数来指定缓存的key,同时也可以按照自己制定的缓存key,使用keyGenerator即可。

    绝命生
  • django-URL应用命名空间(十)

    绝命生
  • springboot缓存之@Caching和@CacheConfig注解

    在执行Localhost:8080/emp/lastName/jack请求之后,会同时将@CachePut缓存规则加入到缓存中。

    绝命生
  • springboot缓存之@Cacheable中常用参数

    我们可以通过key参数来指定缓存的key,同时也可以按照自己制定的缓存key,使用keyGenerator即可。

    绝命生
  • 让网站用上https

    个人认为让一个没什么流量的网站支持https是没什么意义的,第一,支持https后访问速度会变慢 而且浪费服务器资源,但是没办法,一切为了装逼,为了装逼的一切...

    bboysoul
  • sql返回指定节点的树形结构数据

    请叫我树形图 使用sql,返回部门1以及其子部门数据。 很明显就是一个树形递归嘛,用代码就比较好实现。 但是要用sql实现,就稍微麻烦点。...

    用户5166330
  • 自学sql注入(一)

    这是笔者自行整理出来的有关sql注入的一些知识点,自己还有些迷迷糊糊,可能有些不对的地方。等学完之后,再来详写一系列的关于sql注入的文章

    宸寰客
  • Java Web Commons-Utils (数据库连接方法)

        数据库驱动类:Oracle: ojdbc6.jar                   MySQL: mysql-connector-java-5.1....

    Hongten
  • Linux+Nginx/Apache/Tomcat新增SSL证书,开启https访问教程

    上上篇文章《nginx 平滑升级&新增模块》提到了公司的 https 访问需求。当我新增了 SSL 模块之后,却发现以前还真没部署过 https 访问。 下面整...

    张戈

扫码关注云+社区

领取腾讯云代金券