|真香,数据库和缓存一致性的几种实现方式( 二 )
后台会有一个线程消费内存队列里面的数据 , 然后一条一条的执行 。 这样的话 , 一个更新数据的操作 , 先删除缓存 , 然后再去更新数据库 , 但是还没完成更新 。 此时如果一个读请求过来 , 读到了空的缓存 , 那么先将缓存更新的请求发送到队列中 , 此时会在队列中积压 , 然后同步等待缓存更新完成 。
这里有一个优化点 , 一个队列中 , 其实多个更新缓存请求串在一起是没意义的 , 因此可以做过滤 , 如果发现队列中已经有一个更新缓存的请求了 , 那么就不用再放个更新请求操作进去了 , 直接等待前面的更新操作请求完成即可 。
【|真香,数据库和缓存一致性的几种实现方式】等内存队列中将更新数据的操作完成之后 , 才会去执行下一个操作 , 也就是读数据的操作 , 此时会从数据库中读取最新的值 , 然后写入缓存中 。如果请求还在等待时间范围内 , 不断轮询发现可以取到值了 , 那么就直接返回;如果请求等待的时间超过一定时长 , 那么这一次直接从数据库中读取 。
总结
上面说的几种方案 , 都是比较常见的 , 也比较简单 , 没有十全十美的 , 最后的内存队列也会影响性能以及增加系统的复杂度 。 今天讨论的Redis和数据库的数据更新是不可能通过事务达到统一的 , 什么叫做事务 , 就是一损俱损一荣俱荣 , 要么都成功要么都失败 , 这是不能保证的 。
我们只能根据相应的场景和所需要付出的代价来采取一些措施 , 降低数据不一致的问题出现的概率 , 在数据一致性和性能之间取得一个权衡 , 具体场景具体使用 。
作者:jack_xu链接:https://juejin.im/post/5edafcb051882543023c0cd0
推荐阅读
- 苹果手机|从8316来到2449,苹果第一款刘海屏旗舰彻底沦陷,256G真香!
- 技术编程|如何利用数据库进行世界史研究
- 驱动中国|iPhone 12是否真香,这些提前曝光告诉你答案!
- 智能穿戴|小米有品众筹上新了,不到3百Haylou T16耳机,外观小巧音质真香
- 数据库|面试官:说说MySQL数据库分库分表,并且会有哪些问题?
- 刘作虎|刘作虎得意之作:顶级OLED+双扬声器加线性马达,真香!
- 5g|千元真香游戏手机:5G、120Hz、4200mAh,网友:这价格爱了
- 小米手机|最保值的骁龙865旗舰机,发布5个月仅降价300,目前依旧真香?
- 新机发布,5G手机|5G“真香千元机”到来!120Hz+128GB+4200mAh,仅1850元
- 英特尔|两款还未官宣的10代赛扬出现在海外电商平台,赛扬首次拥有4MB三级缓存
