Hi,大家好,我是编程小6,很荣幸遇见你,我把这些年在开发过程中遇到的问题或想法写出来,今天说一说redis数据库一致性问题解决_redis缓存与数据库一致性,希望能够帮助你!!!。
如何解决Redis缓存和MySQL数据一致性的问题?[通俗易懂]
大家好,又见面了,我是全栈君。
在高并发的业务场景下,数据库的性能瓶颈往往都是用户并发访问过大。所以,一般都使用redis做一个缓冲操作,让请求先访问到redis,而不是直接去访问MySQL等数据库。从而减少网络请求的延迟响应
这样的问题主要是在并发读写访问的时候,缓存和数据相互交叉执行。
一、单库情况下
同一时刻发生了并发读写请求,例如为A(写) B (读)2个请求
二、主从同步,读写分离的情况下,读从库而产生脏数据
根本原因:
单库下,逻辑处理中消耗1s。可能读到旧数据入缓存
主从+读写分离,在1s的主从同步时延中。读到从库的旧数据入缓存
一、缓存双淘汰法
二、异步淘汰缓存
上述的步骤,都是在业务线里面执行,新增一个线下的读取binlog异步淘汰缓存模块,读取binlog总的数据,然后进行异步淘汰。
1.思路:
MySQL binlog增量发布订阅消费+消息队列+增量数据更新到redis
1)读请求走Redis:热数据基本都在Redis
2)写请求走MySQL: 增删改都操作MySQL
3)更新Redis数据:MySQ的数据操作binlog,来更新到Redis
2.Redis更新
1)数据操作主要分为两块:
这里说的是增量,指的是mysql的update、insert、delate变更数据。
这样一旦MySQL中产生了新的写入、更新、删除等操作,就可以把binlog相关的消息推送至Redis,Redis再根据binlog中的记录,对Redis进行更新。就无需在从业务线去操作缓存内容
发布者:全栈程序员栈长,转载请注明出处:https://javaforall.cn/111871.html原文链接:https://javaforall.cn
今天的分享到此就结束了,感谢您的阅读,如果确实帮到您,您可以动动手指转发给其他人。