在使用 MongoDB 副本集时,如果使用默认的读写偏好,插入数据后立刻查询,可能会出现刚插入到主库,还没来得及同步到从库,就在从库查询,然后导致这个记录没有被查询到。
那么在 Redis 主从结构中,是否也存在类似的情况呢,插入一条数据,然后立刻查询,可能会查询不到数据? 如果不存在类似情况,Redis 又是如何处理的呢?
1
Jooooooooo 2022-07-20 10:55:04 +08:00
那当然, 主从结构的存储都有这个问题
有几个解法, 比如刚插入就查的场景去查主库, 或者查从库没查到再反查一下主库 |
2
fcten 2022-07-20 11:00:08 +08:00
|
3
crysislinux 2022-07-20 11:21:03 +08:00
一般同步都是非常快的,所以一般就是
1. 如果是客户端插入的数据,客户端可以直接乐观更新,就显示本地的数据 2. 如果插入之后需要立即查,就等几秒钟,一般没啥问题 3. 其他客户端查到旧数据也无所谓,只要不是一会儿新一会儿旧就行,因为同步很快,一般也没问题 如果同步十几秒才完成,那就说明有问题了。 一楼说的刚插入就查主库实际做起来还是挺麻烦的。看你需求严格到哪种程度了。 |
4
crysislinux 2022-07-20 11:22:52 +08:00
我们的备库都没读,只用来做高可用了。负载全靠 cluster 抗 😂
|
5
crysislinux 2022-07-20 11:24:48 +08:00
这个问题是需要妥协的,Designing data-intensive applications 里有专门描述这个问题的章节,你可以找来看看。
|
6
lolizeppelin 2022-07-20 12:42:27 +08:00
所以读写分离要有 async 参数设置
async 查询连接从库 非 async 查询连接主库 |
7
lolizeppelin 2022-07-20 12:44:28 +08:00
数据库要完全主从同步也是可以的,不过要牺牲性能的...操作落地要等待从库完成
一搬的从库为了性能都是 async 同步的,主库不等从库完成 |
8
Saxton 2022-07-20 13:36:18 +08:00
主从结构必定存在延迟问题,这是绝对的,只能叫准实时而不能叫实时。
|