spring boot2 (28)-cache缓存

Spring Cache监控配置与使用规范建议 文章目录建议spring boot 2.x 监控设置定制化配置参考文档 建议 程序中使用的缓存,请在cache-names里指明,如此,可以通过配置文件来明白程序中用到了哪些spring cache。 请尽量对每一个cache分别设置缓存策略,因为不用的cache其使用的场景与缓存对象大小都不一样。分别设置缓存请使用common-spring-cache-configuere。默认spring不... 阅读详情

数据库的数据是存储在硬盘上的,频繁访问性能较低。而缓存数据存储在内存中,访问性能比硬盘快了一个数量级。如果将一些需要频繁查询的热数据放到缓存中,可以大大减轻数据库的访问压力。

pom.xml

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-cache</artifactId>
</dependency>

启用缓存

在配置类中添加以下注解

@EnableCaching

使用缓存

出于方便,这里直接在控制层做缓存。
	@GetMapping("/find")
	@Cacheable(cacheNames = "hello") 
	public String find() {
		System.out.println("从数据库查询数据,并用return返回");
		return "该数据会被缓存";
	}
  • @Cacheable:指在执行find方法前,首先查找该方法是否有缓存,如果有则直接返回缓存,如果没有则执行方法。
  • cacheNames:指定缓存的名称,不同缓存的数据是彼此隔离的。

缓存的key

上面cacheNames指定了缓存名称,但是每个方法由于传参不同,其return数据也会不同,所以一个方法中可能会有多个缓存。要在同一个cacheNames中区别不同的缓存,就需要使用key。修改前两行代码,给find方法传入了一个User,这是我自定义的类,其中有一个id参数。同时指定了key为"#user.id",这是SpEL表达示,指使用user的id作为当前缓存的key。关于SpEL更多 语法可自行百度。

@GetMapping("/find")	
@Cacheable(cacheNames = "hello",key = "#user.id") 
public String find(User user) {
  • 现在访问http://localhost:8080/find?id=1,此时id参数会传入user,最终该缓存的key为1。
  • 然后访问http://localhost:8080/find?id=2,此缓存的key为2,与上面的1不一样,所以它们不是同一个缓存。

修改缓存

	@GetMapping("/update")
	@CachePut(cacheNames = "hello", key = "#id") 
	public String update(String id) {
		System.out.println("读取修改后的数据");
		return "修改后的缓存数据";
	}
  • @CachePut:无论是否存在缓存,它都会执行,而且用return数据刷新缓存。
  • cacheNames:指定要修改的key所属的cacheNames。
  • key:这里方法参数就是id,所以可以直接用#id。

访问http://localhost:8080/update?id=1,此时key为1的缓存将被修改。之后再访问http://localhost:8080/find?id=1,都会得到修改后的数据,find方法中原有的数据被替换了。

删除缓存

访问http://localhost:8080/delete?id=1,即可删除key为1的缓存,和上面一样的原理。

	@GetMapping("/delete")
	@CacheEvict(cacheNames = "hello", key = "#id") 
	public String delete(String id) {
		return "删除成功";
	}

condition条件

如果只想将id为1的查询写入缓存,而其他数据不需要缓存。可以添加condition缓存条件,如下。这里id参数是个字符串型,所以加了单引号,否则1就是整数,条件不成立。
@Cacheable(cacheNames = "hello",key="#user.id",condition ="#user.id=='1'" ) 

此时,只有访问http://localhost:8080/find?id=1才会使用缓存,如果id为其他值将不使用缓存。

unless条件

condition是在调用方法之前判断条件,决定是否缓存。unless是在调用方法之后判断条件,决定是否不缓存。

	@GetMapping("/find")
	@Cacheable(cacheNames = "hello",unless="#result.id.contains('1')" ) 
	public User find(String id) {
		System.out.println("从数据库查询数据");
		User user = new User();
		user.setId(id);
		return user;
	}
  • unless:如果SpEL条件成立,则不缓存。
  • #result.id.contains:result指方法return的数据,id指return的user的id参数,contains指id的值是否包含'1',如果包含则unless条件成立,不进行缓存。

caffeine

spring boot支持多种不同的缓存供应商。在默认情况下使用的是简单缓存,不建议在正式环境使用。我们可以配置一些更加强大的缓存,比如Hibernate的默认缓存EhCache等,而caffeine则是基于java8新出的一个高性能缓存,官方称其接近完美。下面就来介绍在spring boot中集成caffeine。

		<dependency>
			<groupId>com.github.ben-manes.caffeine</groupId>
			<artifactId>caffeine</artifactId>
		</dependency>

在pom.xml中增加以上依赖,spring boot就会自动用caffeine替换默认的简单缓存,用法都是一样的。

properties参数配置

spring.cache.type=caffeine
spring.cache.cache-names=hello,world
spring.cache.caffeine.spec=maximumSize=1,expireAfterAccess=5s
  • spring.cache.type:指定使用哪个缓存供应商
  • spring.cache.cache-names:在启动时创建缓存名称,即前面的cacheNames,多个名称用逗号分隔。
  • spring.cache.caffeine.spec:这是caffeine缓存的专用配置。
  • maximumSize=1:最大缓存数量,假如有缓存1,再写入缓存2时,就有2个缓存,超出最大数量,缓存1就会被清除。
  • expireAfterAccess=5s:缓存5秒,即缓存在5秒之内没有被使用,就会被清除。

默认情况下,缓存的数据会一直保存在内存中,有些数据可能用一次后很长时间都不会再用,这样会有大量无用的数据长时间占用内存,通过配置properties可以及时清除不需要的缓存。

kernel启动流程-start_kernel的执行_6.vfs_caches_init 目录1. 前言2.vfs_caches_init|- -kmem_cache_create_usercopy("names_cache"...)|- -dcache_init|- -inode_init|- -files_init|- -files_maxfiles_init|- -mnt_init|- -bdev_cache_init|- -chrdev_init3. 总结 1. 前言 本专题文章承接之前《kernel启动流程_head.S的执行》专题文章,我们知道在head.S执行过程中保存了bootl 阅读详情

相关推荐

SpringBoot 缓存之 @Cacheable介绍

目录 1 概述 2@Cacheable注解使用详细介绍 2.1 @Cacheable注解使用 2.2Cacheable注解的属性 1 概述 Spring高版本引入了cache的注解技术。该技术是一种规范。Redis的cache技术,底层使用的是Spring Data Redis。cache技术的使用需要掌握的有@EnableCaching、@Cacheable、@CacheEvict、@Caching、@CacheConfig注解的使用,这...

爪哇人的博客 1万+

Spring Cache-缓存自定义配置

1.Cacheable指定自定义属性 /** * 查询所有1级分类 * @Cacheable代表当前方法的结果需要缓存,若缓存中有则方法不会调用,若缓存中没有会调用方法并将结果放入缓存 * 缓存默认行为: * a.若缓存中有则方法不会被调用 * b.key默认自动生成,缓存的名字::SimpleKey [] (自动生成的key值) * c.缓存的value值,默认使用jdk序列化机制,将序列化后的数据存到redis * d.默认ttl时间为-1 * @return */ @Cache

小生不才的博客 4562

Spring Boot 中使用cache缓存的方法

Spring Cache是Spring针对Spring应用,给出的一整套应用缓存解决方案。下面小编给大家带来了Spring Boot 中使用cache缓存的方法,感兴趣的朋友参考下吧一、什么是缓存 CacheCache 一词最早来自于CPU设计当CPU要读取一个数据时,首先从CPU缓存中查找,找到就立即读取并送给CPU处理;没有找到,就从速率相对较慢的内存中读取并送给CPU处理,同时把这个数据所在...

xiao雷博客 6061

【SpringBoot】最通俗易懂缓存机制学习(二)

springboot缓存机制学习

weixin_47418550的博客 1716

芋道源码 —— Spring Boot 缓存 Cache 入门

随着系统访问量的增加,数据库往往成为性能瓶颈。为了减少数据库的压力,提高系统的响应速度,我们可以通过缓存来优化系统性能。

shaozheng0503的博客 1848

SpringBoot : Spring Boot中使用数据缓存 spring-boot-starter-cache

1.美图 2.概述 项目中经常会用到cache技术,Spring boot提供了方便的注解以便我们从重复的cache代码中解放出来。 首先得引入spring-boot-starter-cache这个jar,并在主类中使用 @EnableCaching 注解表示开启缓存。 常用到一下三个注解: @Cacheable 先看缓存是否有数据,有则直接返回,不调用目标方法;否则调用目标方法,并将结果缓...

九师兄 4399

spring boot 2 整合 j2Cache

maven配置: <dependency> <groupId>net.oschina.j2cache</groupId> <artifactId>j2cache-spring-boot2-starter</artif...

chengtouque9610的博客 2747

【Spring】Spring Boot 中使⽤ Cache 缓存的使⽤

主要参数解释举例例value缓存的名称,在 spring 配置⽂文件中定义,必须指定⾄至少⼀一个如 @Cacheable(value=“mycache”) 或者 @Cacheable(value= {“cache1”, “cache2”}key缓存的 key,可以为空,如果指定要按照 SpEL表达式编写,如果不不指定,则缺省按照⽅方法的所有参数进⾏行行组合如@Cacheable(value=“testcache”,key=“#userName”)condition。

九师兄 873

第 4-4 课:Spring Boot 中使⽤ Cache 缓存的使⽤

我们知道绝⼤多数的⽹站/系统,最先遇到的⼀个性能瓶颈就是数据库,使⽤缓存做数据库的前置缓存,可以 ⾮常有效地降低数据库的压⼒,从⽽提升整个系统的响应效率和并发量。 以往使⽤缓存时,通常创建好缓存⼯具类,使⽤时将对应的⼯具类注⼊,操作⼯具类在前端处理缓存的逻 辑。其实这种⽅式是低效的,⼤部分使⽤缓存的场景是基于数据库的缓存,这类缓存场景的逻辑往往是:如 果缓存中存在数据,就从缓...

qq_34227896的博客 1万+

Spring Boot 3.x 系列【25】Spring Cache缓存技术使用详解

在实际开发中,最常见的就是**数据库缓存**,将热点的数据保存在缓存中,减少数据库的查询,不仅能减轻数据库压力,更能提升响应速度。 如何去实现**缓存**,目前也有很多种策略,最常用的就是`Cache-Aside `(边缘缓存模式),适用于读多写少的业务场景,当然关于数据一致性的问题这里不讨论。

记录知识、锤炼自我 1525

【win11+vs 2017+OpenCV4.5.5+Qt5.12配置】详细安装过程+小问题解决

由于Qt5无法与最新的vs2022兼容,扩展工具中一直显示不可用,所以将vs降级成vs2017。在安装Qt的过程中,会选择安装Qt套件,其中就的MCVS 2017,说明vs2017是与qt兼容的。当然也可以用qt creator这一原生IDE。OpenCV版本目前是最新的4.8.0,使用过程中没有什么问题,但是还是安装低版本大概率避免一些玄学问题。

qq_45306739的博客 3351

Spring Boot Cache 缓存使用

1.Spring Boot 使用 Cache 我们知道一个程序的瓶颈在于数据库,我们也知道内存的速度是远大于硬盘的速度的。当我们需要重复地获取相同的数据的时候,我们一次又一次的请求数据库或远程服务,导致大量的时间耗费在数据库查询或者远程方法调用上,导致程序性能的恶化,这便是数据缓存要解决的问题。 1.1 Spring 缓存支持 Spring 定义了 org.springframework.c...

Carey丶zsh 的博客 1302

瑞芯微rv1126 rtsp+mpp+rga取流

瑞芯微rv1109 rtsp+mpp+rga取流

ZuoSeDiao的博客 6340

springboot-cache缓存和J2cache二级缓存框架(带点漫画)

参考连接 SpringBoot中Cache缓存的使用

自行车的博客 2030

BRep实战指南:从理论到文件格式的全面解析

本文全面解析BRep(边界表示法)从基础概念到文件格式的实战应用。详细介绍了BRep的数学定义、工业应用场景,以及STEP、IGES等主流文件格式的对比与使用技巧,帮助读者掌握三维建模核心技术并优化性能。

weixin_29235923的博客 410

解决Visual C++2008安装失败,error 1935

重装系统后Visual C++没了,其他都能装上但VC2008会报这个error 1935。鉴于我把网上所有的解决方法排了一遍错,我也不知道是哪一步起效,所以就都放上来了。特别注意:报error 1935的错误原因可能不尽相同,比如我的报错开头为An error occurred,结尾为HRESULT:0x80070005。80070005 拒绝访问通常是权限问题,安装Visual C++无法写入文件夹或注册表(直接跳转第7步)

weixin_44427808的博客 1万+

Spring Boot+Spring Cache使用Redis缓存

Spring Cache Spring Cache用于对主流的缓存组件(Redis,EhCache,GuavaCache,JCache等)进行集成,提供统一的,基于注解的缓存功能(利用Spring AOP特性)。 常用注解: @Cacheable 一般使用在查询方法。方法的返回值会被缓存。下一次查询,会先检查缓存中是否存在: 如果有,则直接返回,不再调用方法体; 如果没有,则调用方法,然后把结果放入缓存。 value与cacheNames本质相同,定义缓存名称 key:设置key。 keyGener

u012708900的博客 406

Hive中的四种排序方式(order by,sort by,distribute by,cluster by)使用与区别详解

在平时的Hive数仓开发工作中经常会用到排序,而Hive中支持的排序方式有四种,这里结合具体的案例详细介绍一下他们的使用与区别: order by sort by distribute by cluster by 一、order by(全局排序) 1、作用:全局排序,只有一个reducer。 order by 会对输入做全局排序,因此只有一个reducer(多个reducer无法保证全局有序),也正因为只有一个reducer,所以当输入的数据规模较大时会导致计算时间较长。   set hive.mapr

weixin_43230682的博客 1万+

L2Cache快速入门教程:10分钟将Caffeine+Redis二级缓存接入Spring Boot(附完整配置)

L2Cache 是一个基于 **Caffeine + Redis** 的分布式二级缓存框架,兼容 Spring Cache 规范。本教程面向新手,带你用 10 分钟在 Spring Boot 项目中完成 Caffeine 一级缓存 + Redis 二级缓存的混合缓存接入:引入 starter 依赖、配置 application.yml、实现一个极简 CacheService 即可开始使用,全程无需

gitblog_00041的博客 534

【Unity程序技巧】Unity中单例模式管理器

单例模式(Singleton Pattern)是 最简单的设计模式之一

秩沅 1660

mediasoup源码分析(二十)服务端架构设计

目录 简介 信令服务(房间服务) 调度服务 媒体服务 简介 流媒体服务器大的方向上可以分为上述三个模块。目前行业内都是分布式服务,独立部署。mediasoup信令与媒体之间虽然可以管道通信。但在行业内,服务之间通过管道通信用的少。 一般是rpc、mq,或者传统的tcp。这块licode架构比较不错,licode是信令和媒体服务通过MQ消息队列解耦。 下面介绍一下这三个服务主要功能,当然文中所说也是一家之言。 信令服务(房间服务) 信令服务也称为房间服务。有的企业把信令和房间分开,信..

lcalqf的专栏 1546

Spring Boot2.X(一)使用Spring Cache + Redis 实现缓存

一、Spring Cache介绍 二、Spring Boot集成Spring Cache + Redis

欢迎来到【战羽】的博客 2483

Istio ICA考试之路---3-2

部署2个测试容器,分别是test和test2.test注入标签subset=v1。这里文档中省略了metadata的3行,可以从前面任意一个yaml复制粘贴过来。通过test2测试容器访问,50%概率触发500故障注入。通过test测试容器访问,20%概率触发延迟注入。发起20次请求,一共10次被500。

Q先生 729

Spring Boot + Guava Cache缓存应用实战

Guava Cache缓存应用实战 问题背景 实际项目碰到一个上游服务商接口有10秒的查询限制(同个账号)。 项目中有一个需求是要实时统计一些数据,一个应用下可能有多个相同的账号。由于服务商接口的限制,当批量查询时,可能出现同一个账号第一次查询有数据,但第二次查询无数据的情况。 解决方案 基于以上问题,提出用缓存的过期时间来解决。 这时,可用Redis和Guava Cache来...

一大三千的博客 5294

复分析 阿尔福斯(Ahlfors) 第三版答案 英文

答案分为十章,有部分习题没有答案,全英文复分析阿尔福斯(Ahlfors) 第三版答案

efm32 入门.pdf

本PDF共计22页,介绍的是操作驱动API,下载与否自己斟酌。

Spring Boot第八章-数据缓存Cache

Spring Boot缓存,本实例尝试了默认缓存,ehcache缓存,redis缓存

有情怀的程序员的博客 1869

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

如何利用Spring Boot和Spring Cache实现高效的缓存管理?

Spring Cache是Spring框架提供的一个缓存抽象,能够帮助我们简化缓存的使用。它允许开发者在应用中使用不同的缓存实现(比如EhCache、Redis、Caffeine等),并提供了简单易用的注解,让我们可以以声明式的方式管理缓存。借助Spring Cache,开发者无需关注底层缓存的实现细节,只需通过注解配置就能轻松实现缓存机制。

程序员总部的博客 1016

温度PID控制PLC程序

温度PID稳定控制程序,适用于欧姆龙PLC,对其他PLC也具有很大参考价值

上一篇: centos(14)-从源码安装程序
下一篇: spring boot2 (29)-ApplicationRunner和CommandLineRunner初始化
free_java
博客等级 码龄10年 664粉丝 131原创
评论 2
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值