更新
先更新缓存,再更新数据库
存在的问题:如果缓存更新成功,但DB更新失败 -> DB回滚 && 缓存回滚
缓存中的数据为脏数据
先更新数据库,再更新缓存
存在的问题:
线程A 与 线程B 同时操作数据A:
线程A抢到CPU资源,更新DB =1;
线程B抢到CPU资源,更新DB=2 && 更新缓存=2;
线程A抢到CPU资源,更新缓存=1(脏数据)
先删除缓存,再更新数据库
存在的问题:
线程A 与 线程B 同时操作数据A:
线程A抢到CPU资源,删除缓存;
线程B抢到CPU资源,发现缓存不存在 && 读取DB旧值=1;
线程A抢到CPU资源,更新DB=2;
线程B抢到CPU资源,更新缓存=1(脏数据)
先更新数据库,再删除缓存
正常流程:
线程A 和 线程B 同时操作数据A:
线程A抢到CPU资源,查询DB=1;
线程B抢到CPU资源,更新DB=2;
线程A抢到CPU资源,更新缓存=1;
线程B抢到CPU资源,删除缓存;
可能存在的问题(概率很小):
线程A 和 线程B 同时操作数据A:
线程A抢到CPU资源,查询DB=1; -- 一般读DB的速度 比 写DB速度快,很小概率
线程B抢到CPU资源,更新DB=2 && 删除缓存;
线程A抢到CPU资源,更新缓存=1(脏数据)
标签:缓存,DB,更新,问题,线程,一致性,抢到,CPU From: https://www.cnblogs.com/anpeiyong/p/17583797.html