Skip to content
New issue

Have a question about this project? # for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “#”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? # to your account

关于缓存一致性部分的一个建议 #298

Open
CaoChunfang opened this issue Mar 13, 2024 · 4 comments
Open

关于缓存一致性部分的一个建议 #298

CaoChunfang opened this issue Mar 13, 2024 · 4 comments

Comments

@CaoChunfang
Copy link

关于缓存一致性部分我看举了这样一个例子,就先删除缓存,再更新,在还没更新成功的时候来了一个读请求,因为缓存为空所以去读库,结果读到了旧数据并缓存了下来,此时更新操作也成功了,就可能导致缓存不一致的问题。然后我看给的解决方案是用内存列队,等专门用一个线程去更新缓存,感觉这有些复杂了。
我就想知道这里可不可以删两次缓存,第一次删除缓存,然后更新库,更新成功之后再删除一次缓存。这样就算上面说的库还没更新成功来了一个读请求更新了缓存也无所谓,因为马上会被再次删掉,这样不就不会导致不一致的问题了吗?也不知道这种方式有没有其他问题。

@yongroot
Copy link

yongroot commented Mar 13, 2024 via email

@biggerboy
Copy link

缓存旧数据这一步如果在第二次删除执行以后执行呢,也会不一致

@2442603467
Copy link

如果是双删一致性方案的话,写请求为三步骤,假设为1删,2写db,3删。
读请求为两步,1读,2写cache
在这个场景下,一定是先1删,1读,然后剩下的三步操作的顺序不可控。如果是先执行2写db,3删,2写cache的话,缓存依旧与db内容不同。
双删一致性方案的第二次删除可以延迟1s或1s内,这样的话能够保证最多有1s的缓存不一致的情况。

@miracle485
Copy link

miracle485 commented Mar 22, 2024

第一次删缓存是完全没有必要的吧,既然数据源还没有更新,删除缓存的意义在哪里,如果数据更新成功,第二次删就足够了,如果数据更新失败,删缓存只是增加了不必要的数据库访问

# for free to join this conversation on GitHub. Already have an account? # to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

5 participants