MySql业务场景解决方案
1、MySQL和Redis对比
MySQL和Redis是两个不同的数据库系统,它们之间的数据一致性可以通过以下几种策略来保持:
数据库复制
MySQL可以通过主从复制的方式将数据复制到备用的从库,从而提供数据冗余和备份。这种方式可以确保主库和从库中的数据保持一致。同时,Redis也可以通过复制功能实现数据备份和冗余。
事务机制
MySQL和Redis都支持事务机制,这是确保数据一致性的关键机制之一。在执行一系列的操作时,如果其中一个操作失败,整个事务将会被回滚,以确保数据的一致性。
合理设置数据过期时间
在使用Redis时,我们可以为数据设置过期时间,从而确保数据不会一直存储在内存中,而是在过期后自动被删除。这可以避免数据的过度堆积,从而减少内存使用量。
监控和报警
在运行时,我们需要监控数据库的状态,并在出现问题时及时报警,从而及时进行修复。我们可以使用各种监控工具来监视数据库状态和性能,从而及时发现和解决问题。
总的来说,为了保持MySQL和Redis之间的数据一致性,我们需要采取多种措施,包括使用数据库复制、事务机制、设置数据过期时间、监控和报警等。
- 解决高并发场景下数据一致性的方案有两种,分别是延时双删策略和异步更新缓存两种方案
高并发场景下数据一致性是一个比较复杂的问题,需要综合考虑多种因素,下面介绍两种常见的解决方案。
延时双删策略
延时双删策略是指在数据更新时,先删除缓存,再更新数据库。为了保证数据一致性,我们需要延迟一段时间再次删除缓存,以防止在缓存删除后,再次有请求来访问数据库,此时缓存再次读出与未写入数据库之前的脏数据
,导致缓存和数据库不一致的情况。这个时间可以根据具体情况进行调整,通常在几十毫秒到几秒钟之间。这种方案的优点是实现简单,容易理解和部署,缺点是会对系统的性能产生影响,并且无法避免短时间内的数据不一致。
异步更新缓存
异步更新缓存是指在数据更新时,先更新数据库,然后异步更新缓存
。异步更新缓存可以通过多种方式实现,例如消息队列、定时任务等。这种方案的优点是对系统性能的影响比较小,同时可以避免短时间内的数据不一致。缺点是实现比较复杂,需要考虑消息队列的可靠性和稳定性,并且增加了系统的复杂度。
综上所述,延时双删策略和异步更新缓存都是解决高并发场景下数据一致性的有效方案。具体选择哪种方案,需要根据具体的业务场景、系统架构和技术水平等因素综合考虑。
2、幻读操作演示
在这个博主的基础上,增加两种情况的对比:
https://blog.csdn.net/llllllkkkkkooooo/article/details/108068919
可重复读中幻读现象(
未使用MVCC
)
设置可重复读的隔离级别
set global transaction isolation level repeatable read;
#查看当前隔离级别
select @@global.transaction_isolation,@@transaction_isolation;
innodb引擎
引入MVCC机制
,但仍出现幻读情况下。