springboot缓存

news/2024/11/19 12:18:20/

1. 认识缓存  一级缓存

- 缓存是一种介于数据永久存储介质与数据应用之间的数据临时存储介质

- 使用缓存可以有效的减少低速数据读取过程的次数,提高系统性能 

 

@Service
public class BookServiceImplCache implements BookService {@Autowiredprivate BookDao bookDao;private HashMap<Integer,Book> cache =new HashMap();
@Override
public Book getById(Integer id) {Book book =cache.get(id);if(book ==null){//如果boo的id在缓存中不存在,就去数据库中读取,并将读取结果写在缓存中//如果在缓存中,则直接去读取缓存中数据System.out.println("打印查看map中是否有查询id 的数据------"+cache.get(id));Book queryBookFromSQL =bookDao.getById(id);cache.put(id,queryBookFromSQL);System.out.println("打印查看map中是否有查询id 的数据------"+cache.get(id));System.out.println("当前缓存中的所有数据");System.out.println("通过Map.keySet遍历key和value:");for (Integer key : cache.keySet()) {System.out.println("key= "+ key + " and value= " + cache.get(key));}return queryBookFromSQL;}return cache.get(id);
}

第一次执行的结果------缓存中没有数据,会从数据库去拿数据==>  Preparing: select * from tbl_book where id = ?,

也会将读取的数据,放入到map中去


打印查看map中是否有查询id 的数据------null
Creating a new SqlSession
SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@118f4b27] was not registered for synchronization because synchronization is not active
JDBC Connection [com.mysql.cj.jdbc.ConnectionImpl@5b87f91c] will not be managed by Spring
==>  Preparing: select * from tbl_book where id = ?
==> Parameters: 122229(Integer)
<==    Columns: id, type, name, description
<==        Row: 122229, for better tomorrow, from today, 我是行动上的巨人
<==      Total: 1
Closing non transactional SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@118f4b27]
打印查看map中是否有查询id 的数据------Book(id=122229, type=for better tomorrow, name=from today, description=我是行动上的巨人)

 

第二次执行的结果

---控制台没有去数据库读取数据,证明此次是从map中拿取的数据 

2. 二级缓存

- 缓存不仅可以用于提高永久性存储介质的数据读取效率,还可以提供临时的数据存储空间

3 . 使用SpringBoot提供的缓存技术

- 缓存的使用

  -  1. 启用缓存

  -   2. 设置进入缓存的数据

  -  3  设置读取缓存的数据

导入坐标

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

 开启缓存,

在application上添加 

@EnableCaching
@Override
@Cacheable(value = "cacheSpace",key="#id")
public Book getById(Integer id) {return bookDao.getById(id);
}

______________________________________

一个小插曲报错

启动Redis报错 java.lang.IllegalArgumentException: DefaultSerializer requires a Serializable payload

原因: 实体类是一个对象
在redis序列化的时候采用的是 gdk序列化

解决办法
类implements Serializable
不然redis不知道此类是可以被序列化的

 

______________________________________


http://www.ppmy.cn/news/98578.html

相关文章

数据结构之线性表(bsd, sys/queue.h)

数据结构之线性表 Author:Once Day Date:2023年5月27日 参考文档: Linux内嵌链表&#xff08;sys/queue.h&#xff09;详解_tissar的博客-CSDN博客嵌入式大杂烩周记第 3 期&#xff1a;sys/queue.h - 知乎 (zhihu.com)queue(7) - Linux manual page (man7.org)queue(3) - Op…

Pytest运行指定的case,这个方法真的很高效……

Pytest运行指定的case 在测试工作中&#xff0c;当我们写了较多的cases时&#xff0c;如果每次都要全部运行一遍&#xff0c;无疑是很浪费时间的&#xff0c;而且效率低下。 但是有一种方法可以帮助你快速地运行指定的测试用例&#xff0c;提高测试效率&#xff0c;那就是使用…

myql的三种删除方式:delete truncate drop

前言 在 MySQL 中&#xff0c;删除的方法总共有 3 种&#xff1a;delete、truncate、drop&#xff0c;而三者的用法和使用场景又完全不同&#xff0c;接下来我们具体来看。 1.delete detele 可用于删除表的部分或所有数据&#xff0c;它的使用语法如下&#xff1a; delete …

深度学习之卷积神经网络(CNN)

大家好&#xff0c;我是带我去滑雪&#xff01; 卷积神经网络&#xff08;Convolutional Neural Network&#xff0c;CNN&#xff09;是一种基于深度学习的前馈神经网络&#xff0c;主要用于图像和视频识别、分类、分割和标注等计算机视觉任务。它主要由卷积层、池化层、全连接…

软件设计师第4题

首先&#xff0c;我是备考2023年上半年的考试。 一、历年考试题 历年的考题如下&#xff0c;从表中分析可以看出&#xff0c;动态规划法、排序算法、回溯法、分治法是很大概率考察的算法&#xff0c;尤其是动态规划法&#xff0c;本身其理解难度较高&#xff0c;且可以出的题型…

kvm虚拟机的克隆以及快照

一、克隆(常见有3种方法) 1 直接克隆(克隆虚拟机使用自己的磁盘) virt-clone -o vm-01 -n vm-02 -f /kvm/os/vm-02.qcow2 virsh start vm-02         #启动虚拟机后,修改

SAFe术语表

英文中文 Agile Product Delivery 敏捷产品交付 Agile Release Train (ART) 敏捷发布火车 Agile Team 敏捷团队 Architectural Runway 架构跑道 Built-In Quality 内建质量 Business Agility 业务敏捷 Business and Technology 业务与技术 Business Owners 业务…

Redis 常见面试题

1. 认识Redis Redis是一个开源的内存数据结构存储&#xff0c;Redis是一个基于内存的数据库&#xff0c;对数据的读写都在内存中完成&#xff0c;因此数据读写速度非常快&#xff0c;常用于缓存&#xff0c;分布式锁等&#xff0c;MySQL的表数据都存储在 t_order.ibd&#xff…