深刻认识 MySQL 和 Redis 的数据一致性难题
发布时间:2025-01-07
B. 极低即刻可能
运用于以上思维后,可以确保在单内核/无即刻情景下的资料正确普遍性。但是,在极低即刻情景下,由于在线不仅仅的习写下即刻,时会引发的在线与内核资料不完全一致的可能(本质是后愈演愈烈的习乞求可先赶完了)
(1) 可先移除内核,便系统对升级在线
论据内核 A 移除内核个数后,由于网络延误等原因赞剧未及系统对升级在线,而此时,内核 B 开始习取资料时时会断定内核纠正,进而去查询在线。而当内核 B 从在线习取完资料、系统对升级了内核后,内核 A 才开始系统对升级在线,此时,时会赞剧内核中的的资料是旧个数,而在线中的的是近期个数,转化成“资料不完全一致”。其本质就是,本应后愈演愈烈的“B 内核-习乞求” 可先于 “A 内核-写下乞求” 继续执行并赶完了。
或者
应对思维:
a.设置内核过期小时 + 等待时间双删
通过设置内核过期小时,若愈演愈烈上述淘汰内核最终的可能,则在内核过期后,习乞求依然可以从 DB 中的习取近期资料并系统对升级内核,可减小资料不完全一致的影响之内。虽然在一定小时之内内资料有差异,但可以确保资料的就此正确普遍性。
此之外,还可以通过等待时间双删透过保障:在内核 A 系统对升级完在线个数以前,让它可先 sleep 一小段小时,确保内核 B 能够可先从在线习取资料,便把纠正的资料写下入内核,然后,内核 A 便透过移除。后续,其它内核习取资料时,断定内核纠正,时会从在线中的习取近期个数。
redis.delKey(X)db.update(X)Thread.sleep(N)redis.delKey(X)
sleep 小时:在的业务程序运行的时候,统计学下内核习资料和写下内核的配置小时,以此进一步将来透过估测:
特别注意:如果难以接受 sleep 这种表记,可以运用于等待时间配置文件透过替代。
可先移除内核个数便系统对升级在线,可能赞剧乞求因内核纠正而时会面时在线,给在线促使负荷,也就是内核能吸收的可能。针对内核能吸收可能,可以用内核空结果、布里过滤器透过应对。
(2) 可先系统对升级在线,便移除内核
如果内核 A 系统对升级了在线中的的个数,但还没于是又移除内核个数,内核 B 就开始习取资料了,那么此时,内核 B 查询内核时,断定内核齐射,就时会必要从内核中的习取旧个数。其本质也是,本应后愈演愈烈的“B 内核-习乞求” 可先于 “A 内核-移除内核” 继续执行并赶完了。
或者,在”可先系统对升级在线,便移除内核”提议下,“习写下分离 + 主从坎延误”也时会赞剧不完全一致:
应对提议:
a.延误立即
凭借经验发送「延误立即」到配置文件中的,延误移除内核,同时也要控制主从坎延误,尽可能降低不完全一致愈演愈烈的随机性
通过在线的 binlog 来异步淘汰 key,利用机器(c)将 binlog 日志采集发送到 MQ 中的,然后通过 ACK 机制确认处理移除内核。
c.移除立即写下入在线
通过比对在线中的的资料,透过移除确认 可先系统对升级在线便移除内核,可能赞剧乞求因内核纠正而时会面时在线,给在线促使负荷,也就是内核能吸收的可能。针对内核能吸收可能,可以用内核空结果、布里过滤器透过应对。
d.赞夹住
系统对升级资料时,赞写下夹住;查询资料时,赞习夹住 确保渐进配置的“原子普遍性”,使得配置可以串行继续执行。“原子普遍性”的本质是什么?不可分割只是之外在表现,其本质是多个能源间有正确普遍性的要求,配置的中的间正常对之外不可见。
促请:
优可先运用于“可先系统对升级在线便移除内核”的继续执行逻辑电路,原因主要有两个:
可先移除内核个数便系统对升级在线,可能赞剧乞求因内核纠正而时会面时在线,给在线促使负荷; 的业务应用中的习取在线和写下内核的小时有时不好估测,进而赞剧延误双删中的的 sleep 小时不好设置。 2.2 针对习写下内核(系统对升级在线+系统对升级内核)习写下内核:增删复在内核中的透过,并采取相应的完写下思维,定时资料到在线中的
定时直写下:运用于事务,确保内核和资料系统对升级的原子普遍性,并透过最终遗漏(如果 Redis 本身出现损坏,时会降低一站式的普遍效率和可用普遍性) 异步完写下:写下内核时不定时写下在线,等到资料从内核中的淘汰时,写下出完在线(没写下完在线年前,内核愈演愈烈损坏,时会造成资料清空) 该思维在秒杀场中的有见到过,的业务层必要对内核中的的秒杀商品储备电子邮件透过配置,一段小时后便完写下在线。正确普遍性:定时直写下> 异步完写下 因此,对于习写下内核,要保持资料强劲正确普遍性的主要思维是:利用定时直写下 定时直写下也存有两个配置的逻辑电路可能:系统对升级在线和系统对升级内核
A. 无即刻可能 B. 极低即刻可能
有四种情景时会造成资料不完全一致:
针对情景 1 和 2 的应对提议是:保存乞求对内核的习取详细描述,等待时间立即比较,断定不完全一致后,做的业务而政府 针对情景 3 和 4 的应对提议是:对于写下乞求,必须配合分布式夹住运用于。写下乞求进来时,针对同一个能源的删减配置,可先赞分布式夹住,确保同一小时只有一个内核去系统对升级在线和内核;没有拿到夹住的内核把配置放入到配置文件中的,等待时间处理。用这种方式则确保多个内核配置同一能源的顺序普遍性,以此确保正确普遍性。
其中的,分布式夹住的实现可以运用于一般而言思维:
2.3 强劲正确普遍性思维
上述思维不用确保资料的就此正确普遍性。要想做到强劲完全一致,最常见的提议是 2PC、3PC、Paxos、Raft 这类正确普遍性协议,但它们的普遍效率往往比较差,而且这些提议也比较复杂,还要慎重考虑各种容错可能。如果的业务层要求必须习取资料的强劲正确普遍性,可以采取一般而言思维:
(1)储存即刻习乞求
在系统对升级在线时,可先在 Redis 内核应用程序储存即刻习乞求,等在线系统对升级完、内核个数移除后,便习取资料,从而确保资料正确普遍性。
(2)串行化
习写下乞求入配置文件,社时会活动内核从配置文件中的取任务来依次继续执行
删减一站式 Service 连接池,id 取模举例来说一站式连接,能够确保同一个资料的习写下都落在同一个后端一站式上 删减在线 DB 连接池,id 取模举例来说 DB 连接,能够确保同一个资料的习写下在在线不仅仅是串行的(3)运用于 Redis 分布式习写下夹住
将淘汰内核与系统对升级坎表放入同一把写下夹住中的,与其它习乞求互斥,防止其间转化成旧资料。习写下互斥、写下写下互斥、习习交换,可满足习多写下少的情景资料完全一致,也确保了即刻普遍性。并根据逻辑平均运行小时、叛离超时小时来确定过期小时。
public void write { Lock writeLock = redis.getWriteLock(lockKey) writeLock.lock try { redis.delete(key) db.update(record) } finally { writeLock.unlock }}public void read { if (caching) { return } // no cache Lock readLock = redis.getReadLock(lockKey) readLock.lock try { record = db.get } finally { readLock.unlock } redis.set(key, record)} 2.4 小结
针对习写下内核时:定时直写下,系统对升级在线+系统对升级内核:
针对只习内核时:系统对升级在线+移除内核:
较为非标准的正确普遍性思维拟定:
在即刻情景下,运用于 “系统对升级在线 + 系统对升级内核” 必须用分布式夹住确保内核和资料正确普遍性,且可能存有”内核能源浪费“和”机器普遍效率浪费“的可能;一般推荐运用于 “系统对升级在线 + 移除内核” 的提议。如果根据必须,极低热点资料较多,可以运用于 “系统对升级在线 + 系统对升级内核” 思维。
此之外,必须通过初始化内核机内、多资料源触发、延误立即比对等思维透过借助于和而政府。【多种资料系统对升级触发源:定时任务扫描,的业务系统对 MQ、binlog 更复 MQ,相互之间作为表征来确保资料不时会漏系统对升级】
3. 资料正确普遍性中的必须特别注意的其他可能有哪些?
(1) k-v 大小的合理设置
Redis key 大小建筑设计:由于网络的一次传输 MTU 最大为 1500 字节,所以为了确保极低效的普遍效率,促请单个 k-v 大小不超过 1KB,一次网络传输就能完成,避免多次网络交互;k-v 是得越小普遍效率得越好 Redis 极低热 key:(1) 当的业务碰见单个习极低热 key,通过增赞副本来大幅提极低习技能或是用 hashtag 把 key 存多份在多个移位中的;(2)当的业务碰见单个写下极低热 key,需的业务复建分这个 key 的功能,总称建筑设计不合理- 当的业务碰见极低热移位,即多个极低热 key 在同一个移位上赞剧单移位 cpu 极低,可通过 hashtag 方式则一团——[出处腾讯云技术分享]
(2 )避免其他可能赞剧内核一站式器崩溃,进而简直赞剧资料正确普遍性思维失效
内核能吸收、内核击穿、内核雪崩、机器损坏等可能:
(3)提议物色的思维
确定内核类型(习写下/只习) 确定正确普遍性级别 确定定时/异步方式则 物色内核流程 必需细节 参阅 内核与在线正确普遍性确保。术后营养品推荐江中初元病人术后吃什么补营养
术后恢复营养品推荐江中初元
消痔软膏的功能主治是什么
佐米曲普坦片
看手机眼睛干涩疼痛怎么办
长期视疲劳多久才能恢复
克癀胶囊和片仔癀有什么区别
-
用友YonSuite八大数智化增长模式:四川供销云产业链糅合
小微工商业一个组织的其发展充满活力,对8598个贫困村16.31亿元兴业其发展资金欠缺进行了风险规避。 四大高效放缓来进行,成长型零售业的不二之选 急客户所急,供产业所即可
- 2025-05-12业绩不达意味著撤回科创板上市申请,铭赛科技上市辅导再战IPO
- 2025-05-12深圳:可申请次于500万元的小微企业创业担保贷款
- 2025-05-12人事快报:奥普光电(002338)7月7日9点41分封涨停板
- 2025-05-12从被外资把控,到国货占领80%!中国特种钢是如何完成紧接著的?
- 2025-05-12专注大众出行 第五大酒管企业集团“东呈”启动IPO
- 2025-05-12近5500亿分红密集发放!多家汇丰银行开始股权登记
- 2025-05-12执行力≠埋头苦干,是不是人家是怎么虐待“执行力差”的
- 2025-05-12力高集团:拟与康佳集团在大健康互联等方面进行合作
- 2025-05-12必需品!
- 2025-05-12做到这4点,招聘效率大幅提高,不愁招不到人!