知方号

知方号

Redis <如何利用redis处理热点数据>

文章目录 10.Redis和MySQL如何保证数据一致性10.1双写一致性问题10.2数据高度一致性10.3数据同步允许延时10.3.1中间件通知10.3.2延迟双删

10.Redis和MySQL如何保证数据一致性 10.1双写一致性问题

Redis作为缓存,它是如何与MySQL的数据保持同步的呢?特别是在追求双写一致性的道路上,我们该如何操作呢?

其实有两种情况需要讨论:

数据高度一致性:加锁数据同步可以有延时 中间件通知(MQ、Canal)延迟双删(先删除缓存、再修改数据库,经过一段时间,再次删除缓存) 10.2数据高度一致性

想要达到强一致性,我们可以借助Redisson提供的读写锁哦!

共享锁(读锁readLock):一旦加上这个锁,其他线程就可以共享读操作,不会互相干扰,真是好帮手!排他锁(独占锁writeLock):这个锁更霸道,一旦加上,其他线程就别想读写操作了,得乖乖等着。 10.3数据同步允许延时 10.3.1中间件通知 MQ中间件:数据更新后,就通知缓存删除。Canal中间件:Canal伪装成MySQL的从节点,通过读取binlog数据来更新缓存,神奇又方便,而且不需要改业务代码哦! 10.3.2延迟双删 延时双删听起来挺高级,但实际操作起来有点复杂。在更新数据库后,首次删除缓存中的数据,然后经过一段预定的延时(通常是几百毫秒到几秒),再次删除缓存中可能仍然存在的数据。这个延时的目的是为了确保数据库的更新操作能够完成,避免旧的缓存数据被重新读取。第一次删除是为了避免在延时期间有新的请求使用到旧的缓存数据,第二次删除则是在数据库更新完成后彻底移除旧数据,以保持数据一致性。

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至lizi9903@foxmail.com举报,一经查实,本站将立刻删除。