阿里云主机怎么做两个网站,最便宜的购物软件排名,如何形容一个网站做的好,互联网众筹网站怎样建设1、更新了数据库#xff0c;再更新缓存 假设数据库更新成功#xff0c;缓存更新失败#xff0c;在缓存失效和过期的时候#xff0c;读取到的都是老数据缓存。 2、更新缓存#xff0c;更新数据库 缓存更新成功了#xff0c;数据库更新失败#xff0c;是不是读取的缓存的都…1、更新了数据库再更新缓存 假设数据库更新成功缓存更新失败在缓存失效和过期的时候读取到的都是老数据缓存。 2、更新缓存更新数据库 缓存更新成功了数据库更新失败是不是读取的缓存的都是错误的。 以上两种全都不推荐。 3、先删除缓存再更新数据库 有一定的使用量。即使数据库更新失败。缓存也可以会刷。 存在的问题是什么 高并发情况下 比如说有两个线程一个是 A 线程一个是 B 线程。 A 线程把数据删了正在更新数据库这个时候 B 线程来了发现缓存没了又查数据又放入缓存。缓存里面存的就一直是老数据了。 延迟双删。更新完数据库之后我再删一次。 扩展思路 1、消息队列补偿 删除失败的缓存作为消息打入 mqmq 消费者进行监听再次进行重试刷缓存。 2、canal 监听数据库的变化做一个公共服务专门来对接缓存刷新。优点业务解耦业务太多冗余代码复杂度。