升职加薪必看!mysql集群
Posted 爱看动漫的Java程序员
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了升职加薪必看!mysql集群相关的知识,希望对你有一定的参考价值。
今年互联网形式依旧严峻,再次爆发几次大规模裁员潮。我决定把这篇文章分享出来帮助那些对前途感到迷茫的朋友。
在猎头的眼里,我已不是根正苗红的程序员。何为根正苗红?计算机专业毕业,从毕业起就从事特定方向的开发工作,这才是猎头眼中的香饽饽。
毕业之后的那段岁月,可以用悲惨形容,每当和人提起,我总会有点自嘲的说“睡过凌晨一点的办公室,吃过凌晨三点的便利店,做过凌晨五点的首班车”。但是回头想想,我却要感谢那不堪的经历,让我找到了适合自己的方向。
作为技术人员,我一直有个疑问,什么是你引以为傲的资本?面对已经来临的资本寒冬,应该何去何从?
大学期间,我每年都会给自己总结一个词语。回首做技术的这几年,我同样给自己总结了几个关键词。希望大家可以从中受益。
Cache aside
Cache aside
也就是旁路缓存
,是比较常用的缓存策略。
(1)读请求
常见流程
应用首先会判断缓存是否有该数据,缓存命中直接返回数据,缓存未命中即缓存穿透到数据库,从数据库查询数据然后回写到缓存中,最后返回数据给客户端。
(2)写请求
常见流程
首先更新数据库,然后从缓存中删除该数据。
看了写请求的图之后,有些同学可能要问了:为什么要删除缓存,直接更新不就行了?这里涉及到几个坑,我们一步一步踩下去。
Cache aside踩坑
Cache aside策略如果用错就会遇到深坑,下面我们来逐个踩。
踩坑一:先更新数据库,再更新缓存
如果同时有两个写请求
需要更新数据,每个写请求都先更新数据库再更新缓存,在并发场景可能会出现数据不一致的情况。
如上图的执行过程:
(1)写请求1
更新数据库,将 age 字段更新为18;
(2)写请求2
更新数据库,将 age 字段更新为20;
(3)写请求2
更新缓存,缓存 age 设置为20;
(4)写请求1
更新缓存,缓存 age 设置为18;
执行完预期结果是数据库 age 为20,缓存 age 为20,结果缓存 age为18,这就造成了缓存数据不是最新的,出现了脏数据。
踩坑二:先删缓存,再更新数据库
如果写请求
的处理流程是先删缓存再更新数据库
,在一个读请求
和一个写请求
并发场景下可能会出现数据不一致情况。
如上图的执行过程:
(1)写请求
删除缓存数据;
(2)读请求
查询缓存未击中(Hit Miss),紧接着查询数据库,将返回的数据回写到缓存中;
(3)写请求
更新数据库。
整个流程下来发现数据库
中age为20,缓存
中age为18,缓存和数据库数据不一致,缓存出现了脏数据。
踩坑三:先更新数据库,再删除缓存
在实际的系统中针对写请求
还是推荐先更新数据库再删除缓存
,但是在理论上还是存在问题,以下面这个例子说明。
如上图的执行过程:
(1)读请求
先查询缓存,缓存未击中,查询数据库返回数据;
(2)写请求
更新数据库,删除缓存;
(3)读请求
回写缓存;
整个流程操作下来发现数据库age为20
,缓存age为18
,即数据库与缓存不一致,导致应用程序从缓存中读到的数据都为旧数据。
但我们仔细想一下,上述问题发生的概率其实非常低,因为通常数据库更新操作比内存操作耗时多出几个数量级,上图中最后一步回写缓存(set age 18)速度非常快,通常会在更新数据库之前完成。
如果这种极端场景出现了怎么办?我们得想一个兜底的办法:缓存数据设置过期时间
。通常在系统中是可以允许少量的数据短时间不一致的场景出现。
Read through
在 Cache Aside 更新模式中,应用代码需要维护两个数据源头:一个是缓存,一个是数据库。而在 Read-Through
策略下,应用程序无需管理缓存和数据库,只需要将数据库的同步委托给缓存提供程序 Cache Provider
即可。所有数据交互都是通过抽象缓存层
完成的。
如上图,应用程序只需要与Cache Provider
交互,不用关心是从缓存取还是数据库。
在进行大量读取时,Read-Through
可以减少数据源上的负载,也对缓存服务的故障具备一定的弹性。如果缓存服务挂了,则缓存提供程序仍然可以通过直接转到数据源来进行操作。
Read-Through 适用于多次请求相同数据的场景
,这与 Cache-Aside 策略非常相似,但是二者还是存在一些差别,这里再次强调一下:
- 在 Cache-Aside 中,应用程序负责从数据源中获取数据并更新到缓存。
- 在 Read-Through 中,此逻辑通常是由独立的缓存提供程序(Cache Provider)支持。
Write through
Write-Through
策略下,当发生数据更新(Write)时,缓存提供程序 Cache Provider
负责更新底层数据源和缓存。
缓存与数据源保持一致,并且写入时始终通过抽象缓存层
到达数据源。
Cache Provider
类似一个代理的作用。
Write behind
Write behind
在一些地方也被成为Write back
, 简单理解就是:应用程序更新数据时只更新缓存, Cache Provider
每隔一段时间将数据刷新到数据库中。说白了就是延迟写入
。
如上图,应用程序更新两个数据,Cache Provider 会立即写入缓存中,但是隔一段时间才会批量写入数据库中。
这种方式有优点也有缺点:
-
优点
是数据写入速度非常快,适用于频繁写的场景。 -
缺点
是缓存和数据库不是强一致性,对一致性要求高的系统慎用。
最后如何让自己一步步成为技术专家
说句实话,如果一个打工人不想提升自己,那便没有工作的意义,毕竟大家也没有到养老的年龄。
当你的技术在一步步贴近阿里p7水平的时候,毫无疑问你的薪资肯定会涨,同时你能学到更多更深的技术,交结到更厉害的大牛。
推荐一份Java架构之路必备的学习笔记,内容相当全面!!!
成年人的世界没有容易二字,前段时间刷抖音看到一个程序员连着加班两星期到半夜2点的视频。在这个行业若想要拿高薪除了提高硬实力别无他法。
你知道吗?现在有的应届生实习薪资都已经赶超开发5年的程序员了,实习薪资26K,30K,你没有紧迫感吗?做了这么多年还不如一个应届生,真的非常尴尬!
进了这个行业就不要把没时间学习当借口,这个行业就是要不断学习,不然就只能被裁员。所以,抓紧时间投资自己,多学点技术,眼前困难,往后轻松!
要领取这些精心整理出来的资料的话,请记得
发5年的程序员了,实习薪资26K,30K,你没有紧迫感吗?做了这么多年还不如一个应届生,真的非常尴尬!
进了这个行业就不要把没时间学习当借口,这个行业就是要不断学习,不然就只能被裁员。所以,抓紧时间投资自己,多学点技术,眼前困难,往后轻松!
要领取这些精心整理出来的资料的话,请记得
————【关注】+【转发】+【点赞】支持我!创作不易!点击这里前往我的腾讯文档免费下载
以上是关于升职加薪必看!mysql集群的主要内容,如果未能解决你的问题,请参考以下文章