目前各个大项目中多多少少用了写Redis缓存技术,通过对Redis中数据的读取来减少对DB的压力。
一 先淘汰缓存,再写数据库
写数据:删除缓存、更新数据库 读数据:读取缓存、缓存读取不到在读取数据库、将读取到的数据写入缓存
那么在读、写两个分离的技术中就容易造成,数据库和缓存不一致的问题
当用户在更新数据时,在第二个步骤还未执行,但是此时又通过获取数据接口,此时缓存已经删除,但是数据库中还是老数据,那么就会将老数据重新写入缓存,就会导致缓存和数据库中数据不一致。
所以需要解决的方式
1、在读数据的时候,数据库中读取的一定是最新的数据(可以通过分布式锁实现)。
2、读请求造成的脏数据能进行覆盖或是删除。
解决方案一:延迟双删
在写数据的时候加入一个,更新完数据库后,再进行一次删除缓存的操作,具体延迟多久,就需要根据读数据中获取数据和写入缓存的这个时间估值
目的:确保读请求结束,写请求可以删除读请求造成的缓存脏数据。