有人可能看到“本地缓存”这四个字就会觉得不屑,“哼,现在谁还用本地缓存?直接用分布式缓存不就完了嘛”。
然而,这就像你有一辆超级豪华的房车一样,虽然它空间很大,设备很全,但你去市中心的时候,依然会开小轿车一样,为啥?好停车啊!所以,不同的缓存类型是有不同得使用场景的。
并且,为了防止缓存雪崩问题、缓存击穿问题,我们通常会采用多级缓存的解决方案,所谓的多级缓存就是:分布式缓存(Redis 或 Memcached)+本地缓存(Guava Cache 或 Caffeine)。因为分布式缓存可能会失效、可能会挂掉,所以为了系统的稳定性,多级缓存策略使用的非常广泛。
那么,问题来了,怎么保证本地缓存的一致性?
1、如何保证本地缓存的一致性?
在分布式系统中,使用本地缓存最大的问题就是一致性问题,所谓的一致性问题指的是当数据库发生数据变更时,缓存也要跟着一起变更。而分布式系统中每台机器都有自己的本地缓存,所以想要保证(本地缓存的)一致性是一个比较难的问题,但通过以下手段可以最大程度的保证本地缓存的一致性问题。
(1)设置本地缓存短时间内失效
设置本地缓存短时间内失效,短的存活周期,保证了数据的时效性比较高,当数据失效之后,再次访问数据就会拉取新的数据了,这样能尽可能的保证数据的一致性。
它的特点是:代码实现简单,不需要写多余的代码;缺点是,效果不是很明显,不适合高并发的系统。
(2)通过配置中心协调和同步
通过微服务中的配置中心(例如 Nacos)来协调,因为所有 服务器 都会连接到配置中心,所以当数据修改之后,可以修改配置中心的配置,然后配置中心再把配置变更的事件推送给各个服务,各个服务感知到配置中心的配置发生更改之后,再更新自己的本地缓存,这样就实现了本地缓存的数据一致性。
(3)本地缓存自动更新功能
使用本地缓存框架的自动更新功能,例如 Caffeine 中的 refresh 功能来自动刷新缓存,这样就可以设置很短的时间来更新最新的数据,从而也能尽可能的保证数据的一致性,如下代码所示:
// 创建 Caffeine 缓存实例Cache caffeineCache = Caffeine.newBuilder()// 设置缓存项在 5s 后开始自动更新.refreshAfterWrite(5, TimeUnit.SECONDS)// 自定义缓存更新逻辑(即获取新值逻辑).build(new CacheLoader() {@Overridepublic void reload(String key, String oldValue) throws Exception {// 模拟更新缓存的操作updateCache(key, oldValue);}});
2、实际工作中会使用哪种方案?
不同的业务系统,会采用不同的解决方案,例如以下这些场景和对应的解决方案:
在多级缓存中,本地缓存是不可或缺的组成部分,而想要保证本地缓存的数据一致性,可能采用:设置较短的本地缓存过期时间、通过配置中心来协调和同步本地缓存,以及使用本地缓存框架的自动更新功能保证数据的一致性等解决方案,而不同的业务场景,选择的解决方案也是不同的。
通过以上机制,我们就能实现本地缓存的一致性了。那么问题来了,如何实现分布式缓存的数据一致性呢?

i5-3470配什么主板
展开全部我有些不太同意上边的答案,自从被二线的配件坑了以后,看到二线的产品都没有一点好感。 华擎是华硕的二线产品厂商,可以说是华硕的阉割版,虽然品质上有一定的保证,但是毕竟是二线产品,做工和用料以及技艺上都要比一线差一些,不然华硕怎么还会卖把同样型号的主板分成两种价格来卖?肯定是华擎的配件成本要低一些,对应二线厂商的标准。 所以我推荐用华硕的P8B75,我的电脑就是用的i5 3470和华硕P8B75 PLUX ,虽然主板是小板,但是感觉还好,散热也还可以,最起码一线产品用着放心一些,这块板子也就550左右。
局域网中抢网速的有什么好的软件么?除了P2POver...
首先,所有电脑的网速都只能是越来越慢,就好像东西一定会越来越旧,不可能相反。 问题是要学会正确网络设置,这点很重要,以及定时优化网速,以下方法保证安全可靠并明显有效,绝对是个人原创的亲身经历与总结,所以你放心操作。 (也可以加我或进入问问电脑交流群问问里面的好心人)1.一定要设置好虚拟内存,因为这样可以保证电脑有强大的内存空间支持运行多程序。 设置方法如下:右击桌面上的“我的电脑”--属性--高级--点击“性能”区域的“设置”--点击“高级”选项卡--点击“虚拟内存”区域的“更改”。 在驱动器列表中选系统盘符(一般为C盘),然后勾选“无分页文件”项,再单击“设置”按钮。 然后在驱动器列表中选中一个有较大空闲容量的分区(如D盘或E盘或F盘)--选择“自定义大小”选项,将具体数值填入“初始大小”、“最大值”栏中。 推荐初始大小设为你电脑内存条容量的1.5倍,最大值设为内存条容量的3倍(如果你的内存条容量256M的设为384和768,如果你的内存条容量512M的设为768和1536,如果你的内存条容量1G的设为1536和3072)。 提示:虚拟内存只是暂时调用硬盘的容量,所以大家放心,它不会永远占用你硬盘的容量。 点击“设置”,再点击“确定”,最后重新启动电脑,虚拟内存设置就会生效。 XP默认保留了20%的带宽,我们现在释放它。 在“开始→运行”中输入,打开组策略编辑器。 找到“计算机配置→管理模板→网络→QoS数据包调度程序”,选择右边的“限制可保留带宽”,选择“属性”打开限制可保留带宽属性对话框,选择“启用”,并将原来的“20”改为“0”,这样就释放了保留的带宽。 3.长时间的网页缓存文件过多,会明显影响网速,所以要想提高上网的速度就要定期删除缓存中的临时文件。 具体的操作步骤是:打开IE浏览器--工具--InterNet选项--删除所有上网记录和垃圾。 4.恶评软件会严重拖慢网速。 下载360安全卫士,扫描“恶评软件”,把扫出来的所有恶评软件都清空。 5.开机启动的程序太多会很占CPU的,所以它间接地严重影响网速。 我们可以用“优化大师”或“超级兔子” 或“360安全卫士”去掉不用的启动项(如果你不会可以只保留ctfmon这个项其他都去掉就可以了)。 6.电脑已经感染了某些病毒木马将会导致网速很慢。 先用杀毒软件全盘查毒杀毒。 杀毒软件要天天升级,并一个星期全盘查毒杀毒一次,不要怕麻烦。 7.整理磁盘碎片系统提速,网速自然加快。 方法:右击C盘--属性--工具--开始整理--碎片整理,整理时间比较长,所以你一定要耐心等候。 散热好的话,对加快网速有帮助。 所以要保持你的电脑机箱要有良好的散热性,电脑机箱周围最好不要放东西。 9.开机上网时间长,比如已经开机了大半天了,常常会出现上网越来越慢,这是正常的,重启电脑网速一定会明显加快。
为什么路中间的下水盖都是圆的
从生活角度来说,下水盖制造为圆形有三个优点。 其一、下水盖是一种属于金属质地,本身质量很大的物体,所以运输时所耗费的人力较多,要把下水盖移到固定位置时,则至少需要两个人合力才能完成。 而如果把下水盖制造为圆形的,那便只需要一个人就足够了。 先把下水盖从水平放置转为立体放置,因为下水盖是圆形的,没有棱角,则利用车轮原理,人们便可以轻轻松松地通过滚动传运下水盖了,这样既节省人力又节省时间,大大提高了工作效率。 其二,下水道口制造成圆形,可以减少当下水道无盖时不规则的物体掉下去的机率。 因为圆是一种半径等长的几何图形,所以当不规则的特体从无盖的下水道口上方穿过时,就容易被卡住,而不会直接掉进下水道,而方形的下水道口的对角线大于边长,在这种情况下,就比较容易掉入下水道。 所以下水道口被制造为圆形的,自然下水盖也就被制造成圆形的了。 其三,因为圆是曲线图形,没有棱角,而方形有死角,当人不小心掉进下水道或修理工进入下水道修理水管时,如果下水道是方形的,则它的死角极易刮伤人的皮肤,而如果下水道是圆形的,则人的受伤机率也就相对较少了。
发表评论