Redis缓存一致性

1.前言

用过Redis的应该都清楚,redis作为内存缓存,只是他查询快的一大优势,关系型数据库只能用作存储重要数据,或者备份缓存的数据,这个时候,不可避免,我们会遇到缓存中的数据与关系型数据库中的数据不一致的情况。

2.为什么会不一致

出现不一致的现象很常见,如果你是单个用户肯定不会出现这种情况,如果在多线程并发的情况下,这种不一致的情况,就会变得异常普遍,举个例子,A请求删除缓存成功,开始修改数据库,这时候B请求读取缓存,发现缓存中没有数据,于是读取DB,这是A请求还没有修改完DB,这时候B请求开始回写缓存,A将新值写入DB,这就造成缓存中的数据是旧数据,DB中的数据是修改后的数据。

2。如果做了读写分离,也有可能会出现缓存不一致,是因为主从数据库不同步导致的。

3.怎么保持数据一致性

我采用的方法是延时双删,就是A删除缓存之后,过1s钟然后再次删除缓存,为什么是1s呢? 其实不一定准确的就是1S,这个是要看业务环境的,如果并发的时间很短就把时间调短一点,就是保证第二个线程操作的时间多一点点就行。

 

你可能感兴趣的:(Redis)