专栏|分布式缓存系列

简介: 数据一致性

数据一致性

一致性就是数据保持一致,在分布式系统中,可以理解为多个节点中数据的值是一致的。

  • 强一致性:这种一致性级别是最符合用户直觉的,它要求系统写入什么,读出来的也会是什么,用户体验好,但实现起来往往对系统的性能影响大
  • 弱一致性:这种一致性级别约束了系统在写入成功后,不承诺立即可以读到写入的值,也不承诺多久之后数据能够达到一致,但会尽可能地保证到某个时间级别(比如秒级别)后,数据能够达到一致状态
  • 最终一致性:最终一致性是弱一致性的一个特例,系统会保证在一定时间内,能够达到一个数据一致的状态。这里之所以将最终一致性单独提出来,是因为它是弱一致性中非常推崇的一种一致性模型,也是业界在大型分布式系统的数据一致性上比较推崇的模型

业务延时双删

先删除缓存,再更新数据库中如何避免脏数据?采用延时双删策略。

  • 先删除缓存
  • 再写数据库
  • 休眠1秒后再次删除缓存(这1秒=业务可能最大耗时,主要是等待正在加载脏数据的请求完成)

① 读写分离架构

读写架构中,先删除缓存,再更新数据库中如何避免脏数据?采用延时双删策略。

  • 先淘汰缓存
  • 再写数据库
  • 休眠1秒后再次淘汰缓存(这1秒=主从同步可能最大耗时+业务可能最大耗时,主要是等待正在加载脏数据的请求完成)

② 延时双删导致吞吐量降低

延时双删的方式同步淘汰策略导致了吞吐量降低如何解决?

  • 将第二次删除作为异步

MQ重试机制

不管是延时双删还是Cache-Aside的先操作数据库再删除缓存,都可能会存在第二步的删除缓存失败,导致的数据不一致问题,可以引入删除缓存重试机制来解决。

流程如下:

  • 更新数据库数据
  • 删除缓存中的数据,可此时缓存服务出现不可用情况,造成无法删除缓存数据
  • 当删除缓存数据失败时,将需要删除缓存的 Key 发送到消息队列 (MQ) 中
  • 应用自己消费需要删除缓存 Key 的消息
  • 应用接收到消息后,删除缓存,如果删除缓存确认 MQ 消息被消费,如果删除缓存失败,则让消息重新入队列,进行多次尝试删除缓存操作

biglog异步删除

重试删除缓存机制会造成好多业务代码入侵。其实还可以这样优化:通过数据库的binlog来异步淘汰key

流程如下:

  • 更新数据库数据
  • MySQL将数据更新日志写入binlog中
  • Canal订阅&消费MySQL binlog,并提取出被更新数据的表名及ID
  • 调用应用删除缓存接口
  • 删除缓存数据
  • Redis 不可用时,将更新数据的表名及 ID 发送到 MQ 中
  • 应用接收到消息后,删除缓存,如果删除缓存确认 MQ 消息被消费,如果删除缓存失败,则让消息重新入队列,进行多次尝试删除缓存操作,直到缓存删除成功为止
相关实践学习
消息队列RocketMQ版:基础消息收发功能体验
本实验场景介绍消息队列RocketMQ版的基础消息收发功能,涵盖实例创建、Topic、Group资源创建以及消息收发体验等基础功能模块。
消息队列 MNS 入门课程
1、消息队列MNS简介 本节课介绍消息队列的MNS的基础概念 2、消息队列MNS特性 本节课介绍消息队列的MNS的主要特性 3、MNS的最佳实践及场景应用 本节课介绍消息队列的MNS的最佳实践及场景应用案例 4、手把手系列:消息队列MNS实操讲 本节课介绍消息队列的MNS的实际操作演示 5、动手实验:基于MNS,0基础轻松构建 Web Client 本节课带您一起基于MNS,0基础轻松构建 Web Client
相关文章
|
6月前
|
NoSQL 算法 Java
技术好文:Redis实现分布式锁的7种方案
技术好文:Redis实现分布式锁的7种方案
|
存储 NoSQL Redis
python技术面试题(四)--redis持久化
python技术面试题(四)--redis持久化
|
消息中间件 缓存 负载均衡
Redis 从入门到精通之高并发场景中的秒杀理论基础
要深入消息Redis 的高并发场景之前,我们需要先了解一下高并发场景和秒杀理论基础。高并发场景是指在短时间内有大量用户同时访问同一资源,例如网站、应用程序、数据库、服务器等。在高并发场景下,系统需要处理大量的请求,并且需要保证请求的响应时间和系统的稳定性。
171 10
|
存储 缓存 算法
第15章 内存数据库系统——复习笔记
第15章 内存数据库系统——复习笔记
|
canal 缓存 NoSQL
关于项目点赞问题的高并发解决
采用的技术方案是redis解决的
576 0
|
存储 缓存 NoSQL
40.【面试宝典】面试宝典-redis持久化
【面试宝典】面试宝典-redis持久化
40.【面试宝典】面试宝典-redis持久化
|
缓存 NoSQL Java
44.【面试宝典】面试宝典-redis分布式锁
【面试宝典】面试宝典-redis分布式锁
44.【面试宝典】面试宝典-redis分布式锁
|
存储 缓存 关系型数据库
|
存储 消息中间件 缓存
99. 中高级开发面试必问的Redis,看这篇就够了(一)
99. 中高级开发面试必问的Redis,看这篇就够了(一)
142 0
99. 中高级开发面试必问的Redis,看这篇就够了(一)
|
存储 缓存 NoSQL
99. 中高级开发面试必问的Redis,看这篇就够了(二)
99. 中高级开发面试必问的Redis,看这篇就够了(二)
146 0
99. 中高级开发面试必问的Redis,看这篇就够了(二)