当前位置:首页 >> 中医保健 >> 深刻认识 MySQL 和 Redis 的数据一致性难题

深刻认识 MySQL 和 Redis 的数据一致性难题

发布时间:2025-01-07

者 MQ+C 的思维来异步系统对升级内核,对整个系统对升级一站式的资料耐用普遍性和极低分辨率普遍性要求都比较极低,如果转化成资料清空或者系统对升级等待时间可能,时会造成 MySQL 和 Redis 中的的资料不完全一致。因此,运用于这种思维时,必须慎重考虑出现不定时可能时的降级或而政府提议。

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)提议物色的思维

确定内核类型(习写下/只习) 确定正确普遍性级别 确定定时/异步方式则 物色内核流程 必需细节 参阅 内核与在线正确普遍性确保。

术后营养品推荐江中初元
病人术后吃什么补营养
术后恢复营养品推荐江中初元
消痔软膏的功能主治是什么
佐米曲普坦片
看手机眼睛干涩疼痛怎么办
长期视疲劳多久才能恢复
克癀胶囊和片仔癀有什么区别
标签:
友情链接: