首页 >> 方法大全

SpringBootCache源码解析:默认Cache配置

2022-05-15 方法大全 405 作者:考证青年

默认缓存配置

当使用@启动Boot的缓存机制但未添加其他缓存库时,默认提供基于实现的缓存组件

--- .但是官方文档已经明确表示不建议在生产环境中使用这个缓存组件。但它是学习缓存功能的绝佳工具。

这个默认的缓存组件是由tion自动配置的。下面,我们简单了解一下它的自动配置和nager的实现。

自动配置文件非常简单。当容器中不存在的bean满足容器中指定的条件时,会自动配置。 , 中的业务逻辑实现在上一节已经详细讲解过,这里不再赘述。

该方法中,首先创建一个nager对象,然后通过配置属性类获取缓存名称列表。如果列表内容不为空,则赋值给上述对象。

最后调用ers的方法自定义返回。

让我们关注nager类在方法中的内部实现。从名字可以看出,它是基于实现的,是的实现类,也实现了来获取e并进行一些初始化操作。

先看nager的成员变量的源码。

nager中定义的成员变量用于存放Cache。无论是以后获取还是存储缓存类(Cache),都是围绕这个成员变量进行操作的。

这是 Java 中的线程安全且高效的实现。

该属性定义缓存是动态创建还是静态创建,true表示动态创建,false表示静态创建,后面涉及到具体方法和函数时会用到;用于表示是否允许nul值;

p>

表示该值是否需要存储。如果需要存储该值,则必须结合序列进行序列化和反序列化操作。这里的存储值是指复制的值值,而不是存储的引用,它只有在存储的值(复制的值值)存储时才进行序列化和反序列化。

我们先从nager的构造方法开始讲解相关方法。

nager提供了两个构造函数,第一个用于构建动态nager,构造函数实现为空。此构造方法用于自动配置。默认情况下,该属性为true,即动态构造,在请求缓存实例时进行延迟加载。

另一个构造函数的参数是不确定参数,构造函数中的核心操作是调用方法。方法内部,if不为null,即“静态”模式下,遍历缓存名,初始化in的值。这里需要注意的是,一旦进入业务逻辑操作,就意味着缓存的属性和名称都是固定的,运行时不会创建其他缓存区。

那么,如果要改变这种“不变”的情况,该如何应对呢?或者调用该方法,将参数设置为null,然后执行else中的逻辑,设置为true,即静态模式重置为动态模式,允许再次创建缓存区。方法是,所以不仅可以调用构造方法,还可以直接调用实例化的对象进行设置。

在第二个构造函数中调用当前类的ache方法,代码如下。

ache 方法的主要作用是创建一个 Cache 接口的简单实现。在这个方法中,首先根据属性的值判断是否需要-进行序列化,如果不需要,将e置为null。然后,以缓存名称、缓存值、是否允许 Null1 值、序列化的委托类为构造参数创建一个类并返回。

nager中有一个私有方法,满足条件会遍历并调用上述ache方法重置缓存。

当set方法改变or的值时,会调用该方法重置缓存。

最后看一下nager和方法的实现。

该方法直接获取名称中的Set,通过类将其设置为不可变集合并返回。

该方法首先根据名称从 Cache 中获取值。如果值为null且处于动态模式,则同步锁,重新获取判断。如果缓存仍然为空,则调用 - 方法来创建并赋值给 .否则直接返回缓存值。

至此,nager的基本功能已经讲解完毕。提醒一下,这只是一个简单的,没有缓存配置项,只能用于测试环境和简单的缓存场景。

对于高级本地缓存要求,建议使用 、 和其他方法。

最后我们稍微扩展一下上面提到的类,它实现了Cache接口,并提供了缓存值的存储和检索等实现。这些函数的实现都是基于上面提到的构造类时传入的参数。

以 的put方法及相关方法为例,简单说一下它的实现过程。

以上是put方法中涉及的操作。基本步骤如下。

。判断要设置的值是否为 mull,如果是 mull 且允许存储 mull 值,则返回 .。否则,直接返回该值。上面所有的值都赋值给了。

如果序列化委托类 ( ) 不为 null,则通过 e 序列化该值。如果是mul,直接返回。

。无论原始传入值是否, .或者通过以上步骤得到序列化的字节数组,通过store的put方法存储。 store的数据结构是-Map方法,是我们创建它时传入的参数之一。

第一个是缓存的key,第二个是缓存的具体数据。

此时,Boot 默认为 yes。解释了缓存配置。关于鼠标轴滚动或点击等其他方法的实现,以及开始剪切长图类,读者朋友可以自行阅读相关源码,但基本上都是围绕着上面提到的一些属性和数据结构。展开。

总结

本章重点介绍Boot中缓存的自动配置和最简单的基于实现的缓存功能。所涉及的缓存实现仅基于Java提供的数据结构(,)存储。在实战过程中,会根据不同的场景使用不同的三方缓存组件,如 、 、 、 Redis 等。但基本实现原理是一样的方法,读者朋友可以参考本章内容进行具体分析学习。

本文讲解内容为源码分析:默认Cache配置

下一篇会讲解Boot log源码​​分析;

觉得文章不错的朋友可以转发这篇文章关注小编;

感谢您的支持!

这篇文章是我希望天上没有虫子分享给大家的。如果你有什么要分享的,你可以分享。想了解更多,可以在微信公众号找我。我会等你的。

关于我们

最火推荐

小编推荐

联系我们


版权声明:本站内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 88@qq.com 举报,一经查实,本站将立刻删除。备案号:桂ICP备2021009421号
Powered By Z-BlogPHP.
复制成功
微信号:
我知道了