# 【付费】第19章:二级缓存

作者:小傅哥
博客:https://bugstack.cn (opens new window)
星球:https://t.zsxq.com/Ja27ujq (opens new window)

沉淀、分享、成长,让自己和他人都能有所收获!😄

# 一、前言

没有深度,就不会有广度!

以前初学编程的时候,总想着是先学广度还是先学深度,因为毕竟很多技术栈、框架、组件等,根本不是自己能理解的,甚至是拿来使用也很困难。很多时候都是简单的运行下案例,这就是所谓的广度学习了。

但其实随着编程越久越发现,如果没有深度的广度,基本就算不上广度,对于这样的技术学习不抗用、不抗问、不抗事,虽然学习过程轻松但实际效果不佳。也就只有对于初学编程的研发人员来说,这样的广度可以提升下认知。但如果是从事编程几年以后,仍然是这样的“广度”,其实价值已经很低。

# 二、目标

在上一章节我们完成了 Mybatis 框架中关于一级缓存的功能实现,它对数据的缓存操作主要作用于一次 Session 会话的生命周期内,从查询开始保存数据,到执行有可能变更数据库的操作为止清空一级缓存数据。

那么关于缓存的实现,如果我们希望于当会话结束后,再发起的会话还是相同的查询操作,最好也是可以把数据从缓存中获取出来。这个时候该如何实现呢?其实这部分内容就是 Mybatis 框架中的二级缓存,以一个 Mapper 为生命周期,在这个 Mapper 内的同一个操作,无论发起几次会话都可以使用缓存来处理数据。

之所以这个操作称之为二级缓存,是因为它在一级缓存会话层上,添加的额外缓存操作,当会话发生 close、commit 操作时则把数据刷新到二级缓存中进行保存,直到执行器发生 update 操作时清空缓存。