Spring Boot Cache之缓存

缓存详解

缓存就是数据交换的缓冲区(称作Cache),当某一硬件要读取数据时,会首先从缓存中查找需要的数据,如果找到了则直接执行,找不到的话则从内存中找。由于缓存的运行速度比内存快得多,故缓存的作用就是帮助硬件更快地运行。

因为缓存往往使用的是RAM(断电即掉的非永久储存),所以在用完后还是会把文件送到硬盘等存储器里永久存储。电脑里最大的缓存就是内存条了,最快的是CPU上镶的L1和L2缓存,显卡的显存是给显卡运算芯片用的缓存,硬盘上也有16M或者32M的缓存。

Spring3.1开始引入了对Cache的支持

其使用方法和原理都类似于Spring对事务管理的支持,就是aop的方式。

Spring Cache是作用在方法上的,其核心思想是:当我们在调用一个缓存方法时会把该方法参数和返回结果作为一个键值对存放在缓存中,等到下次利用同样的参数来调用该方法时将不再执行该方法,而是直接从缓存中获取结果进行返回。

@CacheConfig

	在类上面统一定义缓存的名字,方法上面就不用标注了当标记在一个类上时则表示该类所有的方法都是支持缓存的

@CachePut

	根据方法的请求参数对其结果进行缓存和 @Cacheable 不同的是,它每次都						会触发真实方法的调用一般可以标注在save方法上面

@CacheEvict

	 针对方法配置,能够根据一定的条件对缓存进行清空一般标注在delete,update方法上面

Spring Cache现有缺陷

	如有一个缓存是存放 List<User>,现在你执行了一个 update(user)的方法,你一定不希望清除整个缓存而想替换掉update的元素这个在现有缓存实现上面没有很好的方案,只有每次dml操作的时候都清除缓存,配置如下@CacheEvict(allEntries=true)

业务逻辑实现类UserServiceImpl

package com.jege.spring.boot.data.jpa.service.impl;import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.cache.annotation.CacheConfig;
import org.springframework.cache.annotation.CacheEvict;
import org.springframework.cache.annotation.CachePut;
import org.springframework.cache.annotation.Cacheable;
import org.springframework.cache.annotation.Caching;
import org.springframework.data.domain.Page;
import org.springframework.data.domain.Pageable;
import org.springframework.data.jpa.domain.Specification;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Propagation;
import org.springframework.transaction.annotation.Transactional;import com.jege.spring.boot.data.jpa.entity.User;
import com.jege.spring.boot.data.jpa.repository.UserRepository;
import com.jege.spring.boot.data.jpa.service.UserService;/*** 接口实现*/
@Service
@Transactional(readOnly = true, propagation = Propagation.SUPPORTS)
@CacheConfig(cacheNames = "user")
public class UserServiceImpl implements UserService {@AutowiredUserRepository userRepository;@Override@Cacheable()public Page<User> findAll(Pageable pageable) {return userRepository.findAll(pageable);}@Override@Cacheable()public Page<User> findAll(Specification<User> specification, Pageable pageable) {return userRepository.findAll(specification, pageable);}@Override@Transactional@CacheEvict(allEntries=true)public void save(User user) {userRepository.save(user);}@Override@Transactional@CacheEvict(allEntries=true)public void delete(Long id) {userRepository.delete(id);}}

如果感觉不错的话记得点赞哟!!!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/565184.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

没有bug队——加贝——Python 练习实例 21,22

21.题目&#xff1a; 猴子吃桃问题&#xff1a;猴子第一天摘下若干个桃子&#xff0c;当即吃了一半&#xff0c;还不瘾&#xff0c;又多吃了一个第二天早上又将剩下的桃子吃掉一半&#xff0c;又多吃了一个。以后每天早上都吃了前一天剩下的一半零一个。到第10天早上想再吃时&…

没有bug队——加贝——Python 练习实例 23,24

23.题目&#xff1a;打印菱形 程序分析&#xff1a;先把图形分成两部分来看待&#xff0c;前四行一个规律&#xff0c;后三行一个规律&#xff0c;利用双重for循环&#xff0c;第一层控制行&#xff0c;第二层控制列。 注&#xff1a;将这个图形看成对称的&#xff0c;前面和后…

Spring Boot 之 itext导出pdf下载

Java操作pdf框架详解 itext是一个能够快速产生PDF文件的java类库。iText的java类对于那些要产生包含文本&#xff0c;表格&#xff0c;图形的只读文档是很有用的。它的类库尤其与java Servlet有很好的给合。使用iText与PDF能够使你正确的控制Servlet的输出。 下载效果演示 po…

从您的计算机移除此产品,解决office提示“此操作只对目前安装的产品有效”的方法...

Office软件是我们所有微软系统预装版本中都会有的一个组件&#xff0c;有的用户在购买电脑之后由于不想使用这个软件等种种原因会选择将这个软件从电脑中卸载。卸载的方法有很多&#xff0c;我们常用的方法就是使用电脑中自带的卸载软件卸载这个程序&#xff0c;还有一种就是使…

没有bug队——加贝——Python 练习实例 25,26

我非常认真的告诉大家今天这是一篇水文&#xff0c;别看了 25.题目&#xff1a; 求12!3!...20!的和。 程序分析&#xff1a;此程序只是把累加变成了累乘。 s 0 l range(1,21) def op(x):r 1for i in range(1,x 1):r * ireturn r s sum(map(op,l)) print (1! 2! 3! …

Spring Boot 之 elasticsearch

elasticsearch详解 ElasticSearch是一个基于Lucene的搜索服务器。它提供了一个分布式多用户能力的全文搜索引擎&#xff0c;基于RESTful web接口。Elasticsearch是用Java开发的&#xff0c;并作为Apache许可条款下的开放源码发布&#xff0c;是当前流行的企业级搜索引擎。设计用…

符江职高计算机教什么,高县符江职高具体地址

摘要&#xff1a;学校地址 :宜宾市高县清福镇学府路22号 公交路线 高县:进入盛兴路&#xff0c;行驶300米-左转&#xff0c;进入朔村路&#xff0c;行驶540米-左转&#xff0c;进入汉胜路&#xff0c;行驶440米-请直走&#xff0c;进入富悦路&#xff0c;行驶200米-请直走&…

MATLAB基础教程(7)——求解定积分和不定积分

目录 定积分的基本概念 什么是定积分&#xff1f; 如何深入的理解定积分&#xff1f; 如何计算定积分? 在matlab中计算定积分。 不定积分 在matlab中计算不定积分 在matlab中计算定积分 本期回顾 定积分的基本概念 什么是定积分&#xff1f; 简而言之&#xff0c;我…

微信公众号中选择时间css,微信公众号到底应该几点推文?

原标题&#xff1a;微信公众号到底应该几点推文&#xff1f;微信公众号到底应该几点推文&#xff1f;早晨上班&#xff0c;中午休息&#xff0c;晚上睡觉前&#xff0c;都是好时间。这些时间别说刚入行的小白知道&#xff0c;就连半只脚没踏进运营门槛的小灰都知道&#xff0c;…

没有bug队——加贝——Python 练习实例 27,28

今天这两题都是递归&#xff0c;如果你看不太明白&#xff0c;可以翻翻之前的&#xff0c;那里介绍的比较明白&#xff0c;嘿嘿&#xff0c;我今天继续水了&#xff0c;拜拜各位&#xff01;&#xff01; 27.题目&#xff1a; 利用递归函数调用方式&#xff0c;将所输入的5个…

C语言程序解析

首先我们要有一段完整的代码。 #include <stdio.h> int main() {puts("Hello World");return 0; }下面我们对以上程序进行解析 函数的概念 先来看第 4 行代码&#xff0c;这行代码会在显示器上输出“Hello World”。前面我们已经讲过&#xff0c;puts 后面要…

MATLAB基础教程(9)——高级积分运算、二重积分

目录 复习定积分&#xff08;单变量&#xff09; 二重积分 今日小结 复习定积分&#xff08;单变量&#xff09; 在之前&#xff0c;先复习一下之前学习的内容。使用matlab求解定积分的步骤大概如下&#xff1a; 定义符号变量&#xff08;syms关键字&#xff09;定义内联函…

服务器怎么存储文件节省空间,超大空间云服务器文件存储

超大空间云服务器文件存储 内容精选换一换本节操作指导您完成Windows操作系统云服务器磁盘空间清理。弹性云服务器匀出一部分磁盘空间来充当内存使用&#xff0c;当内存耗尽时&#xff0c;云服务器可以使用虚拟内存来缓解内存的紧张。但当内存使用率已经非常高时&#xff0c;频…

C语言变量和数据类型

从数据在内存中的存储方式中可以得知 计算机要处理的数据&#xff08;诸如数字、文字、符号、图形、音频、视频等&#xff09;是以二进制的形式存放在内存中的&#xff1b;我们将8个比特&#xff08;Bit&#xff09;称为一个字节&#xff08;Byte&#xff09;&#xff0c;并将字…

MATLAB基础教程(10)——二维中的数据可视化

目录 MATLAB数据可视化 绘图 在同一个figure里面绘制多个图形 本期小结 MATLAB数据可视化 绘图 绘制图形&#xff08;二维&#xff09;一般使用plot函数&#xff0c;这个函数一般能满足很多画图的功能了&#xff0c;比如我们能绘制一个函数图像&#xff1a; 代码如下&…

gen2服务器只显示spbc,gen2-regen培训资料.ppt

gen2-regen培训资料,regen,regen丽珍,regen面膜,auchimregen,manaregen,regenmode,cadregen,otisregen,regenhu概述 GeN2-Regen模型图 E&I Panel SPBC 介绍 电池检查 SPBC 功能按钮介绍 SPBC 各状态灯介绍 ERO&MRO操作说明 手动松闸检查 (E/I-panel) P5T/P6T使用 控制柜…

Spring Boot 分布式会话

应用范围 为了使Web能适应大规模的访问,需要实现应用程序的集群部署实现集群部署首先要解决session的统一&#xff0c;即需要实现session的共享机制&#xff0c;即分布式会话分布式Session的实现方式 基于resin/tomcat web容器本身的session复制机制基于NFS共享文件系统基于Coo…

没有bug队——加贝——Python 练习实例 29,30

目录 29.题目&#xff1a; 30.题目&#xff1a; 彩蛋&#xff1a; 扩展资料 29.题目&#xff1a; 给一个不多于5位的正整数&#xff0c;要求&#xff1a;一、求它是几位数&#xff0c;二、逆序打印出各位数字。 程序分析&#xff1a;学会分解出每一位数。 注&#xff1a;…

Spring Boot Redis

Redis简介 Redis是一个开源的使用ANSI C语言编写、支持网络、可基于内存亦可持久化的日志型、Key-Value数据库&#xff0c;并提供多种语言的API。 存储类型 和Memcached类似&#xff0c;它支持存储的value类型相对更多&#xff0c;包括string(字符串)、list(链表)、set(集合…

没有bug队——加贝——Python 练习实例 31,32

31.题目&#xff1a; 请输入星期几的第一个字母来判断一下是星期几&#xff0c;如果第一个字母一样&#xff0c;则继续判断第二个字母。 程序分析&#xff1a;用情况语句比较好&#xff0c;如果第一个字母一样&#xff0c;则判断用情况语句或if语句判断第二个字母。用 if 语句…