欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 文旅 > 文化 > Java面试题:Redis双写一致性问题

Java面试题:Redis双写一致性问题

2025/3/13 2:46:20 来源:https://blog.csdn.net/qq_55630615/article/details/139471447  浏览:    关键词:Java面试题:Redis双写一致性问题

Redis双写一致性

缓存和数据库数据同步

正常流程:
读操作:

查询缓存,查询命中直接返回,没命中查询数据库将查询到的数据写入缓存,并设定超时时间

写操作:

删除缓存,修改数据库,在延时一段时间后再删除缓存

(延迟双删)延迟:等待数据库的主节点同步到从节点

因为如果先删除缓存

在更新数据库之前有另一个线程对数据库做了查询,就会将还未更新的数据写入缓存,导致与数据库的不一致性

请添加图片描述

如果先更新数据库

在一个线程查询缓存未命中准备写入缓存的过程中,另一个线程对数据库做更新并删除缓存,原本那个线程继续完成的写入缓存数据会和数据库不一致

请添加图片描述

一致性要求高的情况

使用分布式锁(性能低)
共享锁:

读锁readlock,加锁后,线程可以共享读操作但不能共享写操作

排它锁:

独占锁writelock,加锁后,线程会阻塞其他线程的读写操作

允许延迟一致

异步通知保证数据一致

通过mq来进行缓存和数据库之间的数据通知

或者使用Canal来实现异步通知

基于mysql的主从同步实现,将mysql的DDL和DML操作记录到文件中,canal伪装成mysql的一个从节点对文件进行监听和对缓存进行通知

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com

热搜词