Mysql和Redis数据如何保持一致

先阐明一下Mysql和Redis的关系:Mysql是数据库,用来持久化数据,一定程度上保证数据的可靠性;Redis是用来当缓存,用来提升数据访问的性能。

关于如何保证Mysql和Redis中的数据一致(即缓存一致性问题),这是一个非常经典的问题。

使用过缓存的人都应该知道,在实际应用场景中,要想实时刻保证缓存和数据库中的数据一样,很难做到。

基本上都是尽可能让他们的数据在绝大部分时间内保持一致,并保证终是一致的。

缓存不一致是如何产生的

如果数据一直没有变更,那么就不会出现缓存不一致的问题。

通常缓存不一致是发生在数据有变更的时候。 因为每次数据变更你需要同时操作数据库和缓存,而他们又属于不同的系统,无法做到同时操作成功或失败,总会有一个时间差。在并发读写的时候可能就会出现缓存不一致的问题(理论上通过分布式事务可以保证这一点,不过实际上基本上很少有人这么做)。

虽然没办法在数据有变更时,保证缓存和数据库强一致,但对缓存的更新还是有一定设计方法的,遵循这些设计方法,能够让这个不一致的影响时间和影响范围小化。

缓存更新的几种设计

缓存更新的设计方法大概有以下四种:

  • 先删除缓存,再更新数据库(这种方法在并发下容易出现长时间的脏数据,不可取)
  • 先更新数据库,删除缓存(Cache Aside Pattern)
  • 只更新缓存,由缓存自己同步更新数据库(Read/Write Through Pattern)
  • 只更新缓存,由缓存自己异步更新数据库(Write Behind Cache Pattern)

接下来详细介绍一些这四种设计方法

先删除缓存,再更新数据库

这种方法在并发读写的情况下容易出现缓存不一致的问题

 

相关文章

如何在go语言中实现分布式缓存的功能

            2023-08-07
                            语言
                            分布式
                            缓存

Golang测试中的数据生成技巧

            2023-08-07
                            数据
                            生成
                            技巧

SQL数据库触发器语法详解 (sql数据库触发器语法)

            2023-08-06
                            数据库
                            语法
                            触发器

快速简单的删除Oracle数据库字段方法 (删除oracl数据库字段)

            2023-08-06
                            数据库
                            字段
                            删除

如何打开社工数据库bak文件 (社工数据库bak怎么打开)

            2023-08-06
                            数据库
                            打开
                            社工

实现数据库按拼音排序的方法和技巧 (数据库按拼音排序)

            2023-08-06
                            数据库
                            排序
                            按拼音

探究Sybase数据库的性能和功能特点 (sybase数据库怎么样)

            2023-08-06
                            数据库
                            性能
                            探究

SQL Server 如何成功建立自己的数据库? (sql server 建立数据库)

            2023-08-06
                            数据库
                            自己的
                            建立

如何在Oracle中查看数据库触发器? (oracle查看数据库触发器)

            2023-08-06
                            数据库
                            查看
                            触发器

数据库表数据量千万级,对性能影响有多大? (数据库表千万级数据量多吗)

            2023-08-06
                            数据库
                            级数
                            有多大

Oracle数据库客户端:非界面安装程序简易教程 (oracle数据库客户端 非界面安装程序)

            2023-08-06
                            客户端
                            安装程序
                            界面

如何使用Oracle按时间导出表数据库? (oracle按时间导出表数据库)

            2023-08-06
                            数据库
                            导出
                            如何使用

数据库存储:帖子长期保存,信息永不丢失 (帖子存数据库)

            2023-08-06
                            数据库
                            丢失
                            帖子

小米六数据库:全方位数据保障和优化方案 (小米六数据库)

            2023-08-05
                            数据库
                            优化
                            小米

简易教程:使用dbe数据库实现数据连接 (dbe数据库 数据连接)

            2023-08-05
                            数据
                            数据库
                            连接

Oracle实现多个数据库链接的简便方法 (oracle链接多个数据库)

            2023-08-05
                            数据库
                            多个
                            链接

数据库索引:用哪种方法建立? (数据库索引用什么建的)

            2023-08-05
                            索引
                            数据库
                            哪种

实现高效缓存同步:Redis数据库技巧大全 (redis 数据库缓存同步)

            2023-08-05
                            数据库
                            缓存
                            同步

如何利用数据库实现高效的模糊匹配查询? (数据库实现模糊查询)

            2023-08-05
                            查询
                            数据库
                            模糊

数据库有哪些安装方式和位置? (数据库是装在什么上)

            2023-08-05
                            数据库
                            位置
                            装在