CNode

Redis和Mysql数据一致性问题

问答
Hhewentaowx发布于8 年前最后回复8 年前10 回复5237 浏览0 收藏

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

查看回复

回复 (10)

Y
Yangk030208#1·8 年前

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

Z
zy445566#4·8 年前

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

来自酷炫的 CNodeMD

K
kzfile#5·8 年前

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

H
hewentaowx#8·8 年前
引用 Shawn-yehttps://coolshell.cn/articles/17416.html

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

A
Ander456#9·8 年前

666

参与回复
登录后即可参与回复。登录