springboot缓存管理器(CacheManager)讲解——超详细!!!
一、引入
​随着java的慢慢学习,缓存的使用也越来越多。我们使用缓存大多数是通过api的方式来操作,厉害的人也可以自己自定义注解来简化操作,但是看完这篇博客,以后操作注解就不会辣么麻烦了。因为spring中提供了CacheManager接口和一些注解方便我们来操作。

​ 在我们接触的缓存大致两种,本地缓存与中间件缓存。spring对常用的缓存都进行了一些封装。可以通过ctrl+h查看CacheManager的继承类,主要有SimplerCacheManager(内部一个CurrentMap)与RedisCacheManager、EhCacheManager等。

二、demo操作技巧
​ 在自己动手写demo之前,希望能知道一些基础知识。我们操作缓存是需要CacheManager与以下四种注解配合的:

EnableCache

开启Cache注解功能。

Cacheable

根据键从缓存中取值,存在获取到后直接返回。

键不存在则执行方法,将返回结果放入到缓存中。

CachePut

根据键从缓存中取值,无论如何,方法都会被执行,

且返回值存入缓存中

CacheEvict

执行方法后,删除缓存中数据

以上四种注解,除去第一个写在类上,后面三个都是写在方法上,常用的参数如下:

value/cacheNames

定义缓存的名字

定义缓存的名字

key

key 属性是来指定缓存数据所使用的的 key,默认使用的是方法调用传过来的参数作为 key

condition、unless

支持SqEl表达式,都是判断条件,是否使用缓存

案列:

@Cacheable(cacheNames="test",,key = "#test = 3")

此时给注解表示会获取键值为test::3的key,如果不存在,就执行方法,将结果放入缓存中。

三、代码实操
案例代码:

@SpringBootApplication
@EnableCaching
public class App {
public static void main(String[] args) {ConfigurableApplicationContext run = SpringApplication.run(App.class, args);Demo bean = run.getBean(Demo.class);while (true){Scanner scanner = new Scanner(System.in);if (scanner.hasNext()){String next = scanner.next();if ("1".equals(next))bean.test1("demo");if ("2".equals(next))bean.test2("demo");if ("3".equals(next))bean.test3("demo");}}
}

}

@Component
public class Demo {
@Cacheable(cacheNames = "test")
public String test1(String test){System.out.println("i am run");return "test1";
}@CacheEvict("test")
public String test2(String test){System.out.println("i am run");return "test2";
}@CachePut(cacheNames = "test",key = "#test = 3")
public String test3(String test){System.out.println("i am run");return "test3";
}

}

操作结果:

1 ->输入
i am run 缓存中添加新的缓存
3 ->输入
i am run 缓存中的内容刷新
2 ->输入
i am run 缓存被删除

四、缺点
​ 当我们使用缓存中间件的时候,我们不能使用比较复杂的数据结构,都是用string键值对来存去。

五、拓展提高
​ 当我们操作cahche且使用redis默认配置的时候,我们经常会发现我们存入缓存中的数据通过工具查看会乱码,看不懂,这里是因为我们没有配置Cache,将redis作为缓存的话,默认是使用jdk序列化器,所以会乱码看不懂。

这里我们可以通过自定义CacheManager来解决问题。

@Configuration
public class RedisConfig {
@Autowired
private LettuceConnectionFactory lettuceConnectionFactory;@Bean
public RedisCacheManager redisCacheManager(){RedisCacheConfiguration config = RedisCacheConfiguration.defaultCacheConfig().entryTtl(Duration.ofDays(1))//设置缓存过期时间.serializeValuesWith(RedisSerializationContext.SerializationPair.fromSerializer(new GenericJackson2JsonRedisSerializer()));   //设置序列化器RedisCacheManager build = RedisCacheManager.builder(lettuceConnectionFactory).cacheDefaults(config).build();return build;
}

}

springboot缓存管理器(CacheManager)相关推荐

  1. springboot2的redis缓存管理器cacheManager配置,使存入json格式数据

    springboot中默认存入缓存的数据,使用的序列化方案对应的值不方便查看,我们希望存入json格式值,所以要配置cacheManager达到效果 springboot2的缓存管理器配置和sprin ...

  2. Spring 的缓存管理器 CacheManager

    Spring 的缓存管理器 在 spring 项目中提供了CacheManager接口来定义缓存管理器,这样各个不同的缓存就可以实现它来提供管理器的功能了,在spring-boot-starter-d ...

  3. SpringBoot缓存管理(二) 整合Redis缓存实现

    SpringBoot支持的缓存组件 觅波小说网 https://www.3812.info 在SpringBoot中,数据的缓存管理存储依赖于Spring框架中cache相关的org.springfr ...

  4. Spring Cache抽象-缓存管理器

    概述 SimpleCacheManager NoOpCacheManager ConcurrentMapCacheManager CompositeCacheManager 概述 CacheManag ...

  5. spring默认缓存管理器_使用Spring的缓存管理器缓存Web内容

    spring默认缓存管理器 在这篇文章中,我想向大家展示如何使用Spring的CacheManager,@ Cacheable和JMX批注来缓存和管理Web内容的缓存的基础知识. 想象一下一个网上商店 ...

  6. java缓存管理器_使用@EnableCaching的Spring Boot默认缓存管理器

    我在SpringBootApplication中实现了缓存,如下所示 @SpringBootApplication @EnableCaching public class SampleApplicat ...

  7. http缓存管理器_小心缓存管理器

    http缓存管理器 如果使用spring和JPA,则很有可能利用ehcache(或其他缓存提供程序). 您可以在两种不同的情况下进行此操作:JPA 2级缓存和spring方法缓存. 配置应用程序时,通 ...

  8. 【日常】SpringBoot缓存注解器及整合redis实现(附近期一些python零碎的内容)

    序言 似乎灵感枯竭了,完全不知道该写些什么东西,非常的痛苦,决定走读博这条路之后就失去了很多乐趣,总是想应该积累更多的论文和相关项目代码量,但是效率却总是很低,需要应付课程与考试,一篇paper的阅读 ...

  9. 使用Spring的缓存管理器缓存Web内容

    在这篇文章中,我想向您展示如何使用Spring的CacheManager,@ Cacheable和JMX批注来缓存和管理Web内容的缓存的基础知识. 想象一下一个网上商店,它从远程WCMS(Web内容 ...

最新文章

  1. 语言抄袭广东工业大学_CUBA出现消极比赛,广东工业大学与江西师范大学被取消成绩...
  2. java rest post list,Java RestTemplate.postForLocation方法代码示例
  3. Java程序执行Linux命令
  4. 【转】一篇文章读懂人力资源三支柱体系(COE・BP・SSC)
  5. 2.Vue 声明式渲染
  6. 万字整理,图解Linux内存管理所有知识点
  7. java引用公共类_使用键引用从Java公共类获取值 - java
  8. SpringCloud工作笔记046---PostMan打不开怎么解决
  9. 第 4 章 设计模式概述
  10. 深度学习系列(二)【人类语言处理--语音辨识】
  11. SSM面试题,2021最新Java面试题及答案
  12. c程序设计语言cpp,c++中后缀名.c 与.cpp的区别?
  13. 【git】cherry-pick详解
  14. 【html】css样式
  15. 【发现】中国与日德最可怕的差距,看着寒心
  16. 【Mysql】Mysql为什么使用B+树
  17. 银行账户管理系统(一)
  18. 浅析FPC软性线路板补强
  19. 战争教育策略游戏 MiracleGame,开启新阶段重塑生态和玩法
  20. AD-SAL与MD-SAL的比较

热门文章

  1. Tiktok的发展趋势以及政策支持,你了解多少?
  2. 【Vanilla Js 02】事件绑定与去除
  3. Navicat Premium 12下载破解
  4. arcgis计算几何-已禁用
  5. vm安装mac虚拟机 vcpu-0错误
  6. 06-JavaWEB_JSP
  7. 基于node-fontnik部署安装otf转pbf字体(基于ubuntu16.04)
  8. 我的第一篇技术博客 —— 梦的开始
  9. jQuery(三)—节点操作和元素尺寸
  10. 【元胞自动机】基于元胞自动机模拟3D森林火灾模型含Matlab源码