当前位置: 首页 > wzjs >正文

巴中网站开发酒店如何做网络推广

巴中网站开发,酒店如何做网络推广,wordpress添加go,深圳 网站建设设计Cache Aside Pattern 是我们平时使用比较多的一个缓存读写模式,比较适合读请求比较多的场景. 写操作: 先更新db,然后直接删除cache 读操作:从cache中读取数据,读取到就直接返回,cache中读取不到的话,就从db中读取数据返回,再把数据放到cache中 1. 问题:在写数据的过程中,可以…

Cache Aside Pattern 是我们平时使用比较多的一个缓存读写模式,比较适合读请求比较多的场景.

写操作: 先更新db,然后直接删除cache

读操作:从cache中读取数据,读取到就直接返回,cache中读取不到的话,就从db中读取数据返回,再把数据放到cache中

1. 问题:在写数据的过程中,可以先删除cache,再更新db么?
答案:
(1)缓存穿透问题

如果在删除缓存后,更新数据库的操作失败(例如由于网络问题或数据库故障),那么缓存中将不存在该数据,而数据库中的数据也未更新。此时,后续的读请求会直接访问数据库,可能会导致数据库压力过大,甚至可能读取到错误的数据。

(2)数据一致性问题

在高并发场景下,如果多个写操作同时进行,可能会出现以下情况:

  • 一个写操作删除了缓存,但尚未完成数据库更新。

  • 另一个写操作读取了旧数据并更新了数据库。

  • 第一个写操作完成数据库更新,但此时数据库中的数据已经是第二个写操作的结果,导致数据不一致。

(3)缓存雪崩问题

如果大量缓存同时被删除,而数据库更新操作尚未完成,可能会导致大量请求直接访问数据库,从而引发数据库性能瓶颈甚至崩溃。

2. 问题:在写数据的过程中,先更新 db,后删除 cache 就没有问题了么?

(1)缓存击穿问题

如果在更新数据库后,删除缓存的操作失败(例如由于网络问题或缓存服务不可用),那么缓存中可能仍然存在旧数据。后续的读请求可能会从缓存中读取到过时的数据,导致数据不一致。

(2)高并发场景下的问题

在高并发环境下,可能会出现以下情况:

  • 并发写操作:多个写操作同时更新数据库并删除缓存。如果缓存删除操作的顺序与数据库更新操作的顺序不一致,可能会导致缓存与数据库之间的数据不一致。

  • 读写冲突:在更新数据库和删除缓存之间存在时间窗口。如果在这个时间窗口内有读请求,可能会导致读取到旧数据(如果缓存尚未被删除)。

(3)缓存雪崩问题

如果大量数据同时更新数据库并删除缓存,可能会导致缓存中大量数据失效。此时,后续的读请求会直接访问数据库,可能会对数据库造成巨大压力,甚至导致数据库性能瓶颈或崩溃

为了更好的解决上述出现的问题可以按以下操作:

(1)先删除缓存,再更新数据库

虽然这种顺序也有问题,但可以通过以下方式优化:

  • 使用分布式锁:确保删除缓存和更新数据库的操作是原子性的。

  • 引入事务机制:如果缓存服务支持事务,可以将删除缓存和更新数据库的操作放在一个事务中。

  • 设置合理的缓存失效时间:即使删除缓存失败,也可以为缓存设置一个短暂的失效时间,避免缓存长时间不可用。

(2)使用缓存一致性中间件

一些缓存一致性中间件(如Redisson、ShardingSphere等)提供了更高级的缓存一致性解决方案,可以自动处理缓存与数据库之间的同步问题,避免数据不一致。

 

Redission解决缓存一致性问题的方案:

1. 分布式锁

Redisson 的分布式锁可以有效解决并发更新导致的缓存一致性问题。通过在更新数据库和删除缓存的操作之间使用分布式锁,可以确保以下几点:

  • 原子性操作:在更新数据库和删除缓存之间不会被其他操作插入,避免数据不一致。

  • 避免脑裂现象:Redisson 采用 Redlock 算法,确保在分布式环境中锁的可靠性。

  • 锁续命机制:对于长任务,Redisson 提供看门狗机制,自动续命锁,防止锁超时。

实现步骤:
  1. 在更新数据库之前,获取分布式锁。

  2. 更新数据库。

  3. 删除缓存。

  4. 释放分布式锁。

2. 延迟双删策略

延迟双删是一种常用的缓存一致性优化方案:

  1. 先删除缓存。

  2. 更新数据库。

  3. 延迟一段时间(例如 100 毫秒)后,再次删除缓存。

这种方法可以减少并发读请求导致的脏数据问题。不过,如果第二次删除缓存失败,仍然可能导致数据不一致。

3. 消息队列

使用消息队列可以异步处理缓存更新操作:

  1. 更新数据库。

  2. 将删除缓存的操作发送到消息队列。

  3. 消息队列消费者监听消息,执行删除缓存的操作。

这种方法可以减少对主流程的阻塞,提高系统性能。同时,消息队列的重试机制可以确保缓存删除操作最终成功。

4. 基于 Binlog 的异步更新

通过监听数据库的 Binlog 变更事件,可以实现缓存的异步更新:

  1. 更新数据库。

  2. 使用工具(如 Canal)解析 Binlog,将变更事件发送到消息队列。

  3. 消费者根据事件类型更新或删除缓存。

这种方法的优点是解耦了业务代码,减少了对主流程的侵入。

5. 读写锁

Redisson 提供了读写锁机制,可以在读写操作中使用:

  • 写操作:获取写锁,更新数据库,删除缓存,释放写锁。

  • 读操作:获取读锁,读取缓存或数据库,释放读锁。

这种方法可以有效控制并发访问,确保数据一致性。

总结

Redisson 提供了多种机制来解决缓存一致性问题,具体选择哪种方案需要根据业务需求和系统特性来决定:

  • 如果需要强一致性,可以使用分布式锁。

  • 如果可以接受最终一致性,可以使用延迟双删、消息队列或 Binlog 异步更新。

  • 对于读写操作频繁的场景,可以使用读写锁

http://www.dtcms.com/wzjs/562604.html

相关文章:

  • 物流wap网站模板毕业设计代做网站推荐
  • 网站推广方式推荐四川建筑公司招聘信息
  • 我做的网页怎么是危险网站互联网营销案例分析
  • 网站网站制作网站亚马逊官网首页中国
  • 呢图网优化软件seo排名
  • wordpress 站外调用去空格网站
  • 网站大全浏览器wordpress 修改栏目
  • 怎么自己做网站的推广网站建设合同书模板
  • 做针织衫的网站运维培训机构哪个好
  • 网站开发就业培训班wordpress 4.6
  • 广州品牌网站设计wordpress水印图片插件
  • 用dw做电子商务网站步骤网站规划与设计网站页面
  • 江门专业网站建设系统公司网站建设的定位语要怎么取
  • 网站tdk设置界面网店代运营网站
  • 网站开发公司制作平台wordpress怎么自定义表情
  • 上海网站建设怎么响应式网页设计项目
  • 贵州建设职业技术学院网站查成绩查询做app推广上哪些网站
  • 网站主机在哪里注册呢如何建设企业微网站
  • 江西住房城乡建设网站seo排名赚挂机赚钱软件下载
  • 网站建设 代表联系群众登录页面设计图片
  • 内蒙古呼和浩特市做网站的公司俄罗斯乌克兰最新局势最新消息
  • 集团制度建设网站铜川新区网站建设招标
  • 长安营销服务协同管理平台网站素材中国
  • 可以做兼职的网站有哪些临淄网站制作首选专家
  • 静态页面网站wordpress 登陆插件下载
  • 临清建设网站商城网站要怎样设计
  • 珠宝网站官网建设需求百度关键词指数查询
  • 公司做网站需要哪些费用建个人博客网站
  • 推广网站seo做软件界面一般用什么软件
  • 怎样在手机上做网站西安哪有学做淘宝网站