缓存与数据库一致问题

2017-04-07  本文已影响74人  老吴学技术

问题

如果数据库的数据在redis中有一份缓存,那么数据修改时,就需要在分布系统中的两个独立点同步修改。由于整个操作不是原子的,无论先修改哪一个,都会有短暂的不一致。

由此带来另外两个问题:1. 存在并发时,非原子操作可能引入并发问题。2. 如果修改操作的两步中,后一步失败,那么也会造成缓存与数据库的不一致。

如何解决(强一致)?

要解决原子操作的不一致问题,只能通过锁来解决 。将两步操作通过锁变为原子操作。我们可以使用redis,为每个key构造分布锁。
具体流程如下:

存在的缺点

其它方法

如果对一致性要求不高,那么在写库之前,可以先设置key为1s后过期,再更新数据库。如果更新key失败,则重试。更新数据库完成后,设置key过期。如果设置过期失败,那么数据最多有1s不一致。

上一篇下一篇

猜你喜欢

热点阅读