【项目实战】-- 分布式事务的应用(一)

处理方式最多的大概就是保证数据的最终一致性吧。

在我们的业务系统中,缓存(Redis或者Memcached)通常被用在数据库之前,作为数据读取的缓冲,使得I/O操作不至于直接落在数据库上,造成很大的压力。

在我们的系统中相当于做了两层缓存。首先通过创建任务,将服务端提供的一些可静态化的基础数据静态化到MongoDB中,此操作分为定时任务和手动执行任务。而后设置了浏览器缓存(这块待确认。看看代码底层是怎么设置的)。

以文章详情为例,

首先创建任务,基于skynet分布式调度平台来实现的。大致流程如下:

 任务的目的就是将服务端获取到的数据存到MongoDB中。

业务中,如果作者修改了文章,并写到了数据库中,但是此时用户并不能立即从文章详情中看到所修改的内容。因为他依然读的缓存时间内的数据,过了缓存时间后还会先去读一下MongoDB中的数据。此时就造成了MongoDB(缓存系统)数据与数据库系统中数据不一致的现象。

为解决这种场景下造成的数据不一致现象,允许一定时间内数据不一致,但是通过定时执行任务,发送消息,将数据库系统中的数据定时更新到MongoDB中。

另外除以上应用外,可以加入缓存系统,有其他两种解决方案:

  1. 为缓存数据设置过期时间。当缓存中数据过期后,业务系统会从数据库中获取数据,并将新值放入缓存。这个过期时间就是系统可以达到最终一致的容忍时间。

  2. 更新数据库数据后同时清除缓存数据。数据库数据更新后,同步删除缓存中数据,使得下次对商品详情的获取直接从数据库中获取,并同步到缓存。

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值