Redis和Mysql数据一致性问题
发布于 3 年前 作者 hewentaowx 2985 次浏览 来自 问答

RT,请问一下在同时用mysql和redis的情况下,mysql做持久化数据存储,redis做缓存,每次增删改用mysql, 读用redis。请问一下怎么保证每一次增删改完了从redis读到的都是最新的数据?难道增删改都做一次mysql到redis的同步?还是单独发消息处理?请各位大佬不吝赐教,谢谢!

10 回复

1.读数据,先去Redis,如果没有命中就去MySQL。并存到Redis。 2.写数据,先删Redis中的对应数据(或者是其他的操作让缓存过期),然后更新MySQL。

@Yangk030208 初步想法是这样 想问问有没有更好的解决方案,哈哈 谢谢指教

在上家公司做过一套自动化redis缓存。 用sql的md5做为缓存键,存到一个以uid:表名的的hash键里。 如果是这个用户插入,删除,更新了这张表则清除以uid:表名的hash键。 如果是跟用户操作无关操作的,则uid为0。后台则是如果跟某个uid相关则清除uid相关的键。 因为我们uid是透传的,加上用了orm,把代码埋在了执行sql的入口。所以查询表的时候能自动生成,和插删改都能做到自动化清除,前台不需要额外写清除代码。 每个key都在5到10分钟随机了过期时间,保证不会同时失效。 效果还可以,不过我那个场景也是基本上看极多,写极少(写了基本就是下单),如果写多,那我这套缓存就没什么意义了。 如果做了缓存一定要做自动化,如果东一个缓存,西一个缓存,那么到时候清缓存都会变成雷。

来自酷炫的 CNodeMD

我觉得这个需要看具体业务需求去优化,没有银弹

@zy445566 1 谢谢呀 我这个应该写入相对多一点点不过还是参考性很强 谢谢!

@kzfile 嗯嗯 谢谢!

@Shawn-ye 好的 我去看看 感谢!

@Yangk030208 删完之后不要立马更新Redis吧

回到顶部