redis和mysql如何进行数据的一致性操作的呢?
- 1.先更新mysql,再更新redis。 这样会导致,在更新mysql后,还没更新到redis中,仍然有可能会有很用户读到redis中的旧数据。
- 2.先删除redis中的缓存数据,再更新数据库。当再次查询的时候再将数据添加到数据库中。这种虽然能解决1的问题,但是当高并发情况下可能也会出现问题。当一个线程在删除redis中的数据后,没来的急更改mysql中的数据。此时另外一个线程就对该数据进行了读操作,由于还没修改mysql中的数据,那么读到的还是旧数据,并且还存入了redis缓存中。那么后续读的就会又是旧数据。
- 3.延迟双删:此时也是先删redis,然后再更新mysql。不过比第二种方案多了一步就是在更新完数据库后,还需要再次删除一次redis中的缓存数据,这一步就是为了防止第二种方案出现的问题。