提示:文章先作为初版,等后续时间充足后,补充更深的内容
String、StringBuffer、StringBuilder
一、普通方法
-
先更新Mysql,再更新Redis,如果更新Redis失败,可能仍然不一致
-
先删除Redis缓存数据,再更新Mysql,再次查询的时候在将数据添加到缓存中,这种方案能解决1方案的问题,但是在高并发下性能较低,而且仍然会出现数据不一致的问题,比如线程1删除了Redis缓存数据,正在更新Mysql,此时另外一个查询在查询,那么就会把Mysq中老数据又查到Redis中
二、优化方案一:延迟双删
延时双删(或者称为延迟双删)是一种常用的数据一致性保障机制,主要用于保证Redis和MySQL的数据一致性。
具体步骤如下:
当有数据需要更新时,首先删除Redis缓存中对应的数据。
然后更新MySQL数据库中的数据。
延迟一段时间(通常是几百毫秒),再次删除Redis缓存中对应的数据。
这样做的目的是:
在更新MySQL数据期间,其他线程如果从Redis中读取到了旧数据,则可以在延迟时间内将旧数据从Redis中删除,以保证数据的一致性。
如果延迟时间内没有读取到旧数据,则第二次Redis删除操作将不会生效,也不会影响数据的一致性。
需要注意的是,延迟双删并不能完全避免数据不一致的情况,