查询邮箱注册过的网站,广西建设工程管理网站,wordpress 账号图片尺寸,贵阳网站建设q.479185700惠数据库缓存双写一致性的一些个人想法
有这么个问题#xff0c;还是经典面试题#xff1a;
说我们有个数据库#xff0c;他的读请求特别多#xff0c;以至于要在数据库上加一层缓存来抗压#xff0c;这个都能理解吧。 这里的缓存#xff0c;可能是和数据库一样的数据还是经典面试题
说我们有个数据库他的读请求特别多以至于要在数据库上加一层缓存来抗压这个都能理解吧。 这里的缓存可能是和数据库一样的数据也可能是数据库的数据经过一系列复杂运算得出的结果。 但是涉及到更新数据库内容的时候如何能保证缓存也能同时更新呢
先说说网友的说法
1、先删除缓存再更新数据库再更新缓存容易造成脏读
2、先删除缓存再更新数据库然后等若干毫秒再删除缓存再更新缓存降低吞吐量
3、先删除缓存再更新数据库同时把这个更新的请求放在队列中后面有读这个即将更新的数据的请求如果发现缓存没数据会再队列中看一眼发现这条数据正在更新的话就轮询着查缓存直到查到数据否则一段时间后要么超时返回要么返回旧数据。
4、还有一些反例的说法比如先更新缓存再更新数据库之类的我这里就不多解释这样做的问题了。
关于这个问题现在我说下我的理解可能与网上其他说法略有差异
1、首先确认一点什么时候应该用缓存那就是读多写少的情况。一般应用都是这样如果你的场景不是读多写少的我还是不建议使用缓存的因为写操作一多就涉及到事务相关了数据库已经把事务做的那么完善了你非要在上面加个缓存自己再实现一遍出了问题不是自找么。
2、还有如果你的系统对准确性要求特别高比如涉及到钱的计算比如转账那也不建议用缓存直接加机器吧把数据库分片分的片越多性能越好而且这种情况一般都有唯一id比如账号而对于同一个账号基本不会出现什么并发所以老老实实用数据库就行了。
3、除了以上这两种情况那数据库缓存双写一致性那还说个啥。想要数据库缓存一致就必须牺牲吞吐率而加缓存的原因就是读请求太多吞吐率跟不上了那为了解决一致性反而把吞吐量又降低了这不有点自相矛盾么。
总结
有时候我们发现问题就一定要解决当然这是一个很好的习惯。
但如果你作为一个项目的负责人或者技术负责人在技术层面加了时间观念就是不仅要把技术搞好还要把项目搞好要尽快搞好那就不能单纯的看技术了还要多方面考虑。
因为有些问题其实是可以绕过的就比如这个数据库缓存一致性如果你的项目实在是解决不了这个一致性不妨不要解决了退一步试试不用缓存还有没有其他方案比如增加数据库抗压能力等等。
当然以上都是我的个人一些想法不一定都对如果你有任何想法欢迎交流。