面试官:如何保证本地缓存的一致性?

IT科技类资讯2025-11-04 00:16:0928

有人可能看到“本地缓存”这四个字就会觉得不屑,面试“哼,官何现在谁还用本地缓存?保证本地直接用分布式缓存不就完了嘛”。

然而,缓存这就像你有一辆超级豪华的面试房车一样,虽然它空间很大,官何设备很全,保证本地但你去市中心的缓存时候,依然会开小轿车一样,面试为啥?官何好停车啊!所以,保证本地不同的缓存缓存类型是有不同得使用场景的。

并且,面试为了防止缓存雪崩问题、官何缓存击穿问题,保证本地我们通常会采用多级缓存的解决方案,所谓的多级缓存就是:分布式缓存(Redis 或 Memcached)+本地缓存(Guava Cache 或 Caffeine)。因为分布式缓存可能会失效、可能会挂掉,所以为了系统的稳定性,多级缓存策略使用的非常广泛。

那么,问题来了,怎么保证本地缓存的服务器托管一致性?

所谓的一致性是指在同时使用缓存和数据库的场景下,要确保数据在缓存与数据库中的更新操作保持同步。也就是当对数据进行修改时,无论是先修改缓存还是先修改数据库,最终都要保证两者的数据是一样的,不会出现数据不一样的问题。

1、如何保证本地缓存的一致性?

在分布式系统中,使用本地缓存最大的问题就是一致性问题,所谓的一致性问题指的是当数据库发生数据变更时,缓存也要跟着一起变更。而分布式系统中每台机器都有自己的本地缓存,所以想要保证(本地缓存的)一致性是一个比较难的b2b信息网问题,但通过以下手段可以最大程度的保证本地缓存的一致性问题。

(1)设置本地缓存短时间内失效

设置本地缓存短时间内失效,短的存活周期,保证了数据的时效性比较高,当数据失效之后,再次访问数据就会拉取新的数据了,这样能尽可能的保证数据的一致性。

它的特点是:代码实现简单,不需要写多余的代码;缺点是,效果不是很明显,不适合高并发的系统。

(2)通过配置中心协调和同步

通过微服务中的配置中心(例如 Nacos)来协调,因为所有服务器都会连接到配置中心,所以当数据修改之后,可以修改配置中心的配置,然后配置中心再把配置变更的事件推送给各个服务,企商汇各个服务感知到配置中心的配置发生更改之后,再更新自己的本地缓存,这样就实现了本地缓存的数据一致性。

(3)本地缓存自动更新功能

使用本地缓存框架的自动更新功能,例如 Caffeine 中的 refresh 功能来自动刷新缓存,这样就可以设置很短的时间来更新最新的数据,从而也能尽可能的保证数据的一致性,如下代码所示:

复制// 创建 Caffeine 缓存实例 Cache<String, String> caffeineCache = Caffeine.newBuilder() // 设置缓存项在 5s 后开始自动更新 .refreshAfterWrite(5, TimeUnit.SECONDS) // 自定义缓存更新逻辑(即获取新值逻辑) .build(new CacheLoader<String, String>() { @Override public void reload(String key, String oldValue) throws Exception { // 模拟更新缓存的操作 updateCache(key, oldValue); } });1.2.3.4.5.6.7.8.9.10.11.12.

2、实际工作中会使用哪种方案?

不同的业务系统,会采用不同的解决方案,例如以下这些场景和对应的解决方案:

如果对数据一致性要求不是很高,并且程序的并发压力不大的情况下,可能使用方案 1,也就是设置本地缓存短时间内失效的解决方案,因为它的实现最简单。如果对数据的一致性要求极高,且有配置中心的情况下,可使用配置中心协调和同步本地缓存。相反,如果对一致性要求没有那么高,且为高并发的系统,那么可以采用本地缓存的自动更新功能来实现。

小结

在多级缓存中,本地缓存是不可或缺的组成部分,而想要保证本地缓存的数据一致性,可能采用:设置较短的本地缓存过期时间、通过配置中心来协调和同步本地缓存,以及使用本地缓存框架的自动更新功能保证数据的一致性等解决方案,而不同的业务场景,选择的解决方案也是不同的。

课后思考

通过以上机制,我们就能实现本地缓存的一致性了。那么问题来了,如何实现分布式缓存的数据一致性呢?

本文地址:http://www.bhae.cn/html/973a8098946.html
版权声明

本文仅代表作者观点,不代表本站立场。
本文系作者授权发表,未经许可,不得转载。

全站热门

解决galgame电脑运行错误的方法(探索电脑运行错误的原因与解决方案)

报告:开发人员每周只有约 10 小时的深度工作时间

如何使用Quarkus进行serverless function开发?

终于有人把数据架构讲明白了

电脑蓝屏错误代码的解析与处理方法(探索蓝屏错误代码背后的故事,帮助你解决电脑问题)

服务治理:实现服务的自动注册与发现

一文告诉你全世界头部的开发者都在使用什么数据库

基于 RuoYi-Vue 做一个健身会员管理系统,你学会了吗?

友情链接

滇ICP备2023000592号-9