软件编程
位置:首页>> 软件编程>> java编程>> SpringCache之 @CachePut的使用

SpringCache之 @CachePut的使用

作者:最胖的胖胖虎  发布时间:2021-12-06 11:08:31 

标签:SpringCache,@CachePut

使用CachePut注解,该方法每次都会执行,会清除对应的key值得缓存(或者更新),

分为以下两种情况:

如果返回值null,下次进行该key值查询时,还会查一次数据库,此时相当于@CacheEvict注解;

如果返回值不为null,此时会进行该key值缓存的更新,更新缓存值为返回的数据;

分析:情况一返回值为null:


//使用Redis缓存
 @Cacheable(value="Manager",key="#id")
 public User findById(Integer id) {
   System.out.println("---查数据库DB-----");
   return userMapper.selectByPrimaryKey(id);
 }

@CachePut(value="Manager",key="#manager.getId()")
 //@CacheEvict(value="Manager",key="#manager.getId()")//清除数据
 public User update(User manager) {
   userMapper.updateByPrimaryKeySelective(manager);
   //return userMapper.selectByPrimaryKey(manager.getId());
   return null;
 }

情况二返回值不为null: 

先进行数据id为1的查询,发现下次查询id为1的数据不会再查询DB,直接走缓存;

此时进行id为1数据更新操作,并且返回值为null;

进行id为1的数据查询,发现此时id为1缓存不存在,进行DB查询;


//使用Redis缓存
 @Cacheable(value="Manager",key="#id")
 public User findById(Integer id) {
   System.out.println("---查数据库DB-----");
   return userMapper.selectByPrimaryKey(id);
 }

@CachePut(value="Manager",key="#manager.getId()")
 //@CacheEvict(value="Manager",key="#manager.getId()")//清除数据
 public User update(User manager) {
   userMapper.updateByPrimaryKeySelective(manager);
   return userMapper.selectByPrimaryKey(manager.getId());
   //return null;
 }

先进行数据id为1的查询,发现下次查询id为1的数据不会再查询DB,直接走缓存;

此时进行id为1数据更新操作,返回值不为null;

进行id为1的数据查询,发现此时id为1缓存被更新为更新的数据,且没有进行DB查询操作;

补充:@CachePut和@Cacheable的区别

@CachePut负责增加缓存

@Cacheable负责查询缓存,如果没查到,则将执行方法,并将方法的结果增加到缓存

以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。如有错误或未考虑完全的地方,望不吝赐教。

来源:https://blog.csdn.net/MrLiar17/article/details/88253702

0
投稿

猜你喜欢

  • 这段时间想到一个有趣的功能,就是在Android的代码编译期间进行一些骚操作,来达到一些日常情境下难以实现的功能,比如监听应用中的所有onC
  • 1.其中包括下载JDBC FRO Microsft SQL_Server2000的驱动程序(在微软官方网站下的,是sp3版的,这里就不写具体
  • 概要应同学邀请,演示如何使用 PyQt5 内嵌浏览器浏览网页,并注入 Javascript 脚本实现自动化操作。下面测试的是一个廉价机票预订
  • 在Java 5以前,是用synchronized关键字来实现锁的功能。synchronized关键字可以作为方法的修饰符(同步方法),也可作
  • Idea中directory和package的区别,要是错了就右键,make directory as 目录或者源代码目录(Source R
  • 一、简介ThreadPool相比Thread来说具备了很多优势,但是ThreadPool却又存在一些使用上的不方便。比如:Task支持线程的
  • 表单的重复提交: 没有完整的进行一次,先请求表单页面->再提交表单过程而完成数据提交造成的根本原因: 没有完整的进行一次,先请求表单页
  • 这几天恰好和朋友谈起了递归,忽然发现不少朋友对于“尾递归”的概念比较模糊,网上搜索一番也没有发现讲解地完整详细的资料,于是写了这么一篇文章,
  • 固定的策略有时候还是无法满足千变万化的需求变动,一方面需要支持特定的用户需求,另一方面又得尽可能的复用代码,避免重复开发,这就需要将这部分的
  • 01.点明观点C#中,非托管资源使用之后必须释放,而using()是使用非托管资源的最佳方式,可以确保资源在代码块结束之后被正确释放,并且代
  • 前言天空盒这个效果最早是在腾讯的实景地图里看到的,当时觉得很牛逼,但是没有想过自己去实现以下。最近这段时间对opengl很有兴趣,顺便就搞了
  • 紧接上文所述,在这篇文章中我将对Mapper映射文件进行详细的说明。Mapper映射文件是一个xml格式文件,必须遵循相应的dtd文件规范,
  • 在我们对gc中的算法有基本概念理解后,要把算法的理念实现还需要依托实际垃圾收集器的使用。因为光靠一些简单的原理不足以支撑整个程序的运行,在回
  • 1.狂妄的WPF相对传统的Windows图形编程,需要做很多复杂的工作,引用许多不同的API。例如:WinForm(带控件表单)、GDI+(
  • 源代码版本 : spring-webmvc-5.1.4.RELEASE概述PathMatcher是Spring的一个概念模型接口,该接口抽象
  • MediaQuery通常情况下,不会直接将MediaQuery当作一个控件,而是使用MediaQuery.of获取当前设备的信息,用法如下:
  • 一、在spring的应用中我们存在两种过滤的用法,一种是 * 、另外一种当然是过滤器。我们这里介绍过滤器在springboot的用法,在sp
  • 方法一: view.post(Runnable runnable)使用 view 对象,调用 post 方法即可在主线程中执行里边的代码,p
  • Javaweb获取表单数据的几种方式一、通过键值对的形式获取表单数据getParameter(String name):通过key,返回一个
  • 文档更新说明2018年09月24日 v1.0 初稿代理在生活中很常见,比如说婚介网站,其实就是找对象的代理;还有社保代理、人事代理;还有找黄
手机版 软件编程 asp之家 www.aspxhome.com