redis做缓存,mysql的数据怎么与redis进行同步(双写一致性)

基于业务做选择,强一致性和允许延迟再加消息队列

强一致性:当修改了数据库的数据同时更新缓存的数据,缓存和数据库的数据保持一致

读操作:缓存命中,直接返回数据,缓存没有命中,查询数据库,写入缓存,设定过期时间

写操作:延迟双删 :先删除缓存,修改数据库,等待延迟(数据库主从节点,读写分离,需要等待主节点数据传给从节点的数据库,从节点负责被其他线程读取,只有从节点的数据正确的时候再被读取才能够保证新的缓存是正确的),再删除缓存,等其他线程读取从节点数据写新的缓存数据到缓存中,但是延迟时间不好掌握,时间短了依然会有脏数据,时间长了性能太差

解决办法:

分布式锁:

线程1:先加锁,写入数据,删除缓存,释放锁

线程2:等待锁,加锁,读缓存未命中,读取数据库,更新缓存,解锁

读写锁:redission提供的读写锁

共享锁:读锁readlock,加锁之后,其他线程可以共享读操作

排他锁:独占锁writeLock,加锁之后,阻塞其他线程的读写操作

当线程是读操作时加共享锁,其他线程依然可以读取数据

当线程是写操作时加排他锁,其他线程被阻塞,这样可以极大提升分布式锁的性能

优点:强一致

缺点:性能低

允许延迟一致:采用异步通知

最终一致性:可以使用MQ的可靠性来保证数据的最终一致性,修改数据发送消息给MQ,监听消息来更新缓存.

相关推荐
佛祖让我来巡山6 分钟前
Redis 为什么这么快?——「极速快递站」的故事
redis·redis为什么快?
斯普信专业组2 小时前
构建基于MCP的MySQL智能运维平台:从开源服务端到交互式AI助手
运维·mysql·开源·mcp
啦啦啦_99992 小时前
Redis-0-业务逻辑
数据库·redis·缓存
自不量力的A同学2 小时前
Redisson 4.2.0 发布,官方推荐的 Redis 客户端
数据库·redis·缓存
Exquisite.2 小时前
Mysql
数据库·mysql
fengxin_rou2 小时前
[Redis从零到精通|第四篇]:缓存穿透、雪崩、击穿
java·redis·缓存·mybatis·idea·多线程
fengxin_rou3 小时前
黑马点评实战篇|第二篇:商户查询缓存
缓存
是阿楷啊3 小时前
Java大厂面试场景:音视频场景中的Spring Boot与微服务实战
spring boot·redis·spring cloud·微服务·grafana·prometheus·java面试
笨蛋不要掉眼泪3 小时前
Redis哨兵机制全解析:原理、配置与实战故障转移演示
java·数据库·redis·缓存·bootstrap
·云扬·15 小时前
MySQL Binlog落盘机制深度解析:性能与安全性的平衡艺术
android·mysql·adb