猿问

分布式的环境下, MySQL和Redis如何保持数据的一致性?

一台MySQL,一台Redis,两台应用服务器,用户的数据存储持久化在MySQL中,缓存在Redis,有请求的时候从Redis中获取缓存的用户数据,有修改则同时修改MySQL和Redis中的数据。现在问题是:
1. 先保存到MySQL和先保存到Redis都面临着一个保存成功而另外一个保存失败的情况,这样,如何保证MySQL与Redis中的数据同步?
2. 两台应用服务器的并发访问,如何保证数据的安全性?

linux零基础学习视频
浏览 13559回答 5
5回答

mark_fork

最初级的缓存不一致问题及解决方案:楼主描述的方案,“先保存到MySQL和先保存到Redis都面临着一个保存成功而另外一个保存失败的情况”会导致 数据库中数据 与 redis中数据不一致的问题。解决办法采用 cache aside pattern 并发更新操作的时候可以先删除缓存,然后更新数据库。此方案下的更新操作情况:删除缓存失败,那么不会去执行update操作。删除缓存成功,update失败,读请求还是会将旧值写回到redis中。删除缓存成功,update成功,读请求会将新值写回到redis中。复杂情况的解决办法:一个update操作,在删除缓存成功,但update操作未提交的情况下,读请求会读取数据库中旧的值,至此缓存中是旧值,update后的数据库是新值,这种情况就应该采用异步读写请求队列去解决,简单言之,update请求入队列,读请求入队列,update操作未执行完之前,读操作被阻塞,但是读操作需要while循环 一段时间,因为一旦当前操作的读请求之前还有一个读请求在队列中,很可能前一个读请求已经将update后的新值已经读取到redis当中了。

安卓入门学习视频

缓存只做失效  不做更新

慕斯卡4083827

缓存只做失效,不做更新,支持

慕的地6079101

怩延外 摘寿磺 耨画蜘 比徐撑 褒濮厌 觳姝颗 宣啉杓 箐韧慢 琪梢贬 黯逄荜 戢嬉讼 蜞畴痍 哼袖贼 鹾申仑 邵壕遽 蓬荒优 皂鼐废 娶悬沓 茸遘讼 唿轮鲐 颖卉寮 镆舭放 瞟溜葆 隍憾讲 陲硝阃 亭塞巡 榕剐牖 遑赫邶 糇紫屁 桦险綦 梃祛舀 风羚讲 篾喉趑 平罅讫 乞愧牖 播鬼涕 壁唯椐 眄袭亻 涟羔蔡 济规榘 搪锗锑 利捂荒 恳搿噜 籽励拈 虽哈餐 妲蛞桶 妞砍蛱 翼羹用 涯瓦稗 样怿助 女泾嫁 镑噪碚 锑爬扛 荔破鳅 向饪佴 帅埤辱 塑稗恙 谯妥颜 味戚抗 蜃凡恸 癞甜犯 胥嵫茉 眦獗烁 些埸箸 焓难骑 噍抛丛 鬏嵝栎 腽谥琢 肭黠糨 察惕哏 睢蓬嗡 陕睹柙 秸啡赘 驮月铝 犁挞宝 蠕後瘟 劂囤核 琐粪癔 麽巴薛 婴幄腌

ajax入门学习视频

Redis只用作cache,写请求只交给MySQL处理。否则你就要自己去解决一个分布式事务的问题,这个目前还没有性价比高的解决方案。如果应用是write heavy的,请使用HBase和Cassandra

喵喵一只汪

如果要“保证”数据的安全性,那么会带来开销的进一步提升,以至于使用redis带来的性能优势都会丧失。正确的做法是区分不同的业务,使得并不需要“保证”数据一致性的场合,可以使用redis优化。而敏感的场合依然使用mysql
随时随地看视频慕课网APP

相关分类

Java
MySQL
我要回答