今天面试阿里,缓存与数据库双写问题,我给出的答案是先更新…

今天面试阿里,缓存与数据库双写问题,我给出的答案是先更新库在删除缓存,然后请求过来一个业务流程走完就OK了,面试官说不行,先更新库在直接更新缓存,绝对不能让用户过来走业务刷新缓存;那我就有疑问了,这个值如果是两张表里边求和的值呢,不走业务逻辑的情况下你怎么更新你缓存的值?大佬语塞

今日头条员工:其实可以分细一点,没必要抬杠,你们说的是不同场景

前欢聚时代员工:直接更新缓存 你怎么保证写成功? 更新超时这种无法解决吧?

公孙止:不管怎么做都有他的优点缺点,感觉这个面试官太武断了

百度员工:应该是 先删除缓存 在更新数据库[害羞][害羞]。这样只会出现一次miss[害羞][害羞]

前欢聚时代员工:@百度员工 更新完得再删一次,俗称双删,但是实际上 先更新再删除就行了,出现脏缓存的机率很小

程序猿.归辛树:@百度员工 你这样不行 在你更新数据时删掉缓存,但是更新的事务还没提交。读的流程触发,读的老数据放到了缓存里。

前陌陌员工:m

李毅大帝:m

程序猿.方证:m

楼主:@今日头条员工 我是想分析的,没给我机会,直接来了一句今天到这里了吧[笑哭]

今日头条员工:@楼主 水货面试官

程序猿.李典:M

卡大佐卡瓦尼:@程序猿.归辛树 这个时候应该是持锁的吧?其他线程能读?

程序猿.朱仝:上次去滴滴,也是这问题,说了双删,他说这样会有啥问题,我懵逼了

泰山弟子:@卡大佐卡瓦尼 我觉得他的意思是,可能先删缓存,然后更新的事物都还没开启,然后有个读请求把未更新的老数据放到缓存了。

百度员工:@程序猿.归辛树 加个分布式锁啊[挖鼻屎][挖鼻屎][挖鼻屎]

111111员工:m

程序猿.武当弟子:先更新库,再删缓存,再尝试更新缓存 不是正常流程么?

程序猿.只手撸天:老哥面的阿里云,专有云吧?我也碰到他了,这个面试官技术不行,各种漏洞,碰到他自认倒霉吧。

前欢聚时代员工:@卡大佐卡瓦尼 Mvcc不会锁的,非锁定读

程序猿.低压锅蒂亚戈:不谈场景谈一致性的都是耍流氓。读多写多,从数据库到缓存的数据聚合计算是否耗时都会影响你的策略,下次回答先让面试官说清楚场景

程序猿.低压锅蒂亚戈:@程序猿.武当弟子 你这个很容易产生脏数据。第一次的删除缓存和更新缓存之间插入另一个事务并完成了滚存更新,之后第一个滚存更新开始,存的是旧的值

程序猿.低压锅蒂亚戈:这个问题需要考虑两点,1高并发条件下,任何两个操作之间都有可能插入另一个完整的事务,从而可能造成脏数据。2.事务里面使用其他网络通信,可能由于网络波动,造成通信时间过长,最终导致事务时间过长,锁表时间过长,并发能力降低。

程序猿.武当弟子:@程序猿.低压锅蒂亚戈 对,十分认同,对于基本缓存信息,准确度要求高,修改概率低的,改库,删缓存,尝试更新缓存这种步骤。对于秒杀这一类,高并发,修改率高,一致性准确性可以用业务补全的数据可以先改缓存。

woting:先库后缓冲

程序猿.海棠花神:M

颜良:m

圣诞将军:m

自由职业员工:@泰山弟子 为啥不先更新库再操作缓存?

今日头条员工[2]:m

网易员工:现在缓存同步都是监听binlog异步刷保证最终一致性了吧

小魔兽行云流水鱼:N

前创业公司员工:那这个面试官有点low了 不同业务场景不同处理 看业务需求了

程序猿.低压锅蒂亚戈:@网易员工 多表聚合或者计算再缓存这能做么

程序猿.张青:正常做法都是先更后删,要不报销点,双删,宁愿丢性能也不要不一致

拼多多员工:一般就2种,先更新数据库再del缓存,或者先更新数据库再update缓存,分不同场景,问题都不是很大,虽然存在那么一小会脏数据

今日头条员工[3]:还有种是缓存自动过期,其实最终一致性就行

尼克:m

网易员工:@程序猿.低压锅蒂亚戈 能啊,看你拿到binlog自己怎么处理了

华为员工:@前欢聚时代员工 即使是双删,在高并发场景,写事务没提交之前,也可能有一些读是脏数据,面试官的问题就来了,这要怎么处理?

abcdefg员工:其实万一读到脏数据也没关系吧。写数据库的时候cas就行。

阿里巴巴员工:其实读不走consensus的必然结果就是可能存在脏读,即使双删一样会有一段时间可能触发脏读。这个要 case by case 优化,能容忍脏读到什么程度?最终一致直接让缓存定期失效就行,能容忍写数据丢失就直接读写走缓存,异步刷,剩下的就是各种双些双删的套路尽可能降低可能发生脏读的时间段。最极端的完全不能容忍不一致的场景,在读流程上一定会增加 round trip

前欢聚时代员工:@华为员工 事务没提交就是不算脏读。 只有一种情况就是 删缓存后有个读线程刚好进来将旧数据给读出来缓存了,这个概率比较低吧。高并发下 这个概率会被放大,要么改用缓存不过期的形式,更新数据库后更新缓存,这个也会有数据不一致的情况,无法保证缓存和数据库事务的原子性。一种就是还是原来那样 read through的模式,只不过用单前读select for update 来读,相当一个分布式锁吧,这样可以保证数据的可见性,适合读多写少的业务场景。

努力做好每件事:m

深圳市家里登科技有限公司员工:最后过了?这才是我关心的

丁春秋:M

上海亚太计算机信息系统有限公司员工:m

网易游戏员工:@网易员工 mysql?

三石兄弟:m

红太狼:我想这个面试凉了

美团今年校招算法30k起步了吗? 程序猿.宋兵乙:…

美团今年校招算法30k起步了吗?[冷汗]程序猿.宋兵乙:大多数24,没必要幸存者偏差 程序猿小宇:m 暖羊羊:@程序猿.宋兵乙 大部分27+ 程序猿.宋兵乙:@暖羊羊 开发21.24.27,算法24.27.31,你的意思是sp和ssp能占大多数? 丁珰:24 27 30 蚂蚁金服员工:5:4:1 暖羊羊:@程序猿.宋兵乙 是的,差不多1半是有的 腾讯员工:是…

什么细节可以判断女同事有点绿茶 程序猿.泰山弟子:…

什么细节可以判断女同事有点绿茶[吐血]程序猿.泰山弟子:m 武当弟子:m 我是来找妹纸的:发现天天找你搞暧昧,也和别人这样 程序猿.王铁匠:比如某个老公有天提前下班了回家,到家后他老婆说给他变一个魔术大变活人,到卧室一掀被子,被窝里是一脸懵逼的光屁股隔壁老王:我是是谁我怎么在这里。 从这些蛛丝马迹,就可以隐约判断出,他老婆有点绿茶了 程序猿.孙乾:@程序猿.…

于某违反竞业协议,赔偿京东12万元...程序猿.冯默风:…

于某违反竞业协议,赔偿京东12万元...程序猿.冯默风:京东的竞业协议都包括哪些公司,竟然能被抓住 设计狮.马良:@程序猿.冯默风 基本中国的互联网公司。还有国外的巨头都在 程序猿.冯默风:@设计狮.马良 这人该不会被领导盯上了吧,不然就是核心,不然怎么为他启动竞业了 狐媚胡梅尔斯:折咋发现的 低压锅蒂亚戈:竞业协议是什么意思 关兴:关键是离职后从京东每个月…

百度今年校招大变天,给这么多了 程序猿.尼古拉斯赵…

百度今年校招大变天,给这么多了[哈哈]程序猿.尼古拉斯赵四:? 程序猿.尼古拉斯赵四:给多少 宋兵甲:百度开奖了吗[疑问] 程序猿.尼古拉斯赵四:等开奖等麻了 美团点评员工:真的假的?那以后校招美团垫底了? 华山弟子:m 昆仑弟子:据说sp有28k? 程序猿.双曲空间:m 程序猿.风清月朗:多少? 百度公司员工:m 低压锅蒂亚戈:钓鱼? 都是浮泡:m 楼主:…

尴尬了刚才面试,面试官说我这没图没声,刚才我调了半天,特…

尴尬了刚才面试,面试官说我这没图没声,刚才我调了半天,特么笔记本摄像头有个滑盖[笑哭]程序猿.百云:华为吧 程序猿.武当弟子:正好考验下你解决问题能力[害羞] 运营.云中鹤:惠普 点点工程师:Thinkpad吗 程序猿.这太阴霸了:你摄像头有没有对着你看不到么…… 运营.福康安:。。。你不提前调试设备吗 程序猿.水野亚美:没声也跟滑盖有关? 程序猿.张飞:M