问题遇到的现象和发生背景
- 先更新数据库,再更新缓存》问题:更新完数据库后,出现没有执行缓存更新
- 先删除缓存,再更新数据库》问题:删除缓存后,更新数据库前会有B线程重新读到旧值,放到redis中,然后A线程再更新数据库,导致数据库更新成功,redis还是旧值
- 先删除缓存,再更新数据库,再延迟删除缓存》问题延迟删除失败了呢?会不会退化成第一或者第二种情况
我的解答思路和尝试过的方法
所以我想这样是不是更靠谱一些,优化一下方案1:
(1) 先设置过期时间为5s (保证缓存能存活一段时间,业务执行完后也能够保证redis短时间内过期,其他线程重新从数据库中读取,假如执行失败,直接放回给用户,更新失败),
(2) 再更新数据库 (此前或期间B线程过来,会命中缓存,返回旧数据,)
(3) 再更新缓存 ,同时更新过期时间 (假如执行成功第一步失效,过期时间恢复正常;假如失败,有第一步保底,做延迟删除,旧数据存活时间也只有5秒)
大家帮忙回答一下,我这种方案是否可行?