Redis和MySQL的数据同步问题

Redis的工作流程

1.前台发送请求,后台接口去查询。

2.先去查询Redis缓存里面有没有数据,如果有数据,就直接返回数据。

3.如果Redis缓存里面没有数据,就去查询数据库,在数据库中查到数据以后,保存到Redis缓存中,然后在返回前台数据。

4.如果查询数据库都查询不到数据,就直接结束。

Redis和MySQL的数据同步问题_第1张图片

 如何解决Redis与数据库的数据同步问题?

1.第一种方案:先更新数据库,在删除Redis缓存。

可能会出现的问题:在高并发的情况下,当一个用户A修改数据之后,先去更新数据库,在用户A还没有删除Redis缓存的时候,用户B又进来查询数据,但是用户B查询到的是Redis缓存里面的旧数据,这样明显就会出错,虽然可以通过加锁的机制去解决,但是会大大降低查询性能。

Redis和MySQL的数据同步问题_第2张图片

 2.第二种方案:先删除Redis缓存,在更新数据库

可能会出现的问题:用户A修改信息之后,先删除Redis里面的缓存,在用户A还没来得及更新数据库的数据的时候,用户B又进来查询数据,发现Redis缓存里面没有数据,然后去查询数据库,然后将查询结果保存到Redis缓存中,但是现在的问题就是用户A还没来得及修改数据库里面的数据,用户B就直接把数据库里面的未修改的数据保存到了Redis缓存中。这样也会造成数据的不同步。

Redis和MySQL的数据同步问题_第3张图片

 可以通过延迟双删来解决这个问题。原理就是在用户A删除缓存,确保已经修改数据库里面的数据之后,在经过一定的时间之后去把Redis缓存的数据在删除。这样可以确保数据库和Redis缓存里面的数据是一致的。

Redis和MySQL的数据同步问题_第4张图片

 

你可能感兴趣的:(redis,mysql,数据库)