首页 > 数据库 >缓存和数据库一致性问题

缓存和数据库一致性问题

时间:2023-09-11 21:23:41浏览次数:42  
标签:方案 缓存 删除 数据库 更新 一致性 延迟

先说结论:

1、想要提高应用的性能,可以引入「缓存」来解决

2、引入缓存后,需要考虑缓存和数据库一致性问题,可选的方案有:「更新数据库 + 更新缓存」、「更新数据库 + 删除缓存」

3、更新数据库 + 更新缓存方案,在「并发」场景下无法保证缓存和数据一致性,且存在「缓存资源浪费」和「机器性能浪费」的情况发生

4、在更新数据库 + 删除缓存的方案中,「先删除缓存,再更新数据库」在「并发」场景下依旧有数据不一致问题,解决方案是「延迟双删」,但这个延迟时间很难评估,所以推荐用「先更新数据库,再删除缓存」的方案

5、在「先更新数据库,再删除缓存」方案下,为了保证两步都成功执行,需配合「消息队列」或「订阅变更日志」的方案来做,本质是通过「重试」的方式保证数据一致性

6、在「先更新数据库,再删除缓存」方案下,「读写分离 + 主从库延迟」也会导致缓存和数据库不一致,缓解此问题的方案是「延迟双删」,凭借经验发送「延迟消息」到队列中,延迟删除缓存,同时也要控制主从库延迟,尽可能降低不一致发生的概率。

 

参考文献:https://mp.weixin.qq.com/s?__biz=MzIyOTYxNDI5OA==&mid=2247487312&idx=1&sn=fa19566f5729d6598155b5c676eee62d&chksm=e8beb8e5dfc931f3e35655da9da0b61c79f2843101c130cf38996446975014f958a6481aacf1&scene=178&cur_album_id=1699766580538032128#rd

标签:方案,缓存,删除,数据库,更新,一致性,延迟
From: https://www.cnblogs.com/xiaochaoheni/p/17694540.html

相关文章

  • Redis 缓存击穿,缓存穿透,缓存雪崩原因+解决方案
    缓存击穿,缓存穿透,缓存雪崩的原因缓存击穿:key对应的数据存在,但在redis中过期,此时若有大量并发请求过来,这些请求发现缓存过期一般都会从后端DB加载数据并回设到缓存,这个时候大并发的请求可能会瞬间把后端DB压垮。缓存穿透:key对应的数据在数据源并不存在,每次针对此key的请求从缓存......
  • 数据库 -- day01
    一、数据库简介1、为什么需要数据库磁盘->高级缓存->寄存器->CPU数据存储在内存中,但是内存大小有限、不可能存储所有数据,并且掉电后数据丢失为了让程序在关机重启后数据依然可以使用,必须把数据保存在磁盘文件中随着程序功能越来越复杂、数据量越来越多、数据关系也越......
  • K8s - 安装部署MongoDB数据库教程1(单实例)
    来源:https://www.hangge.com/blog/cache/detail_3158.htmlMongoDB 是一个基于分布式文件存储的数据库。我之前文件中介绍如何使用官方提供的安装包进行 MongoDB 数据库的安装(点击查看),以及如何通过 Docker 来快速搭建 MongoDB 数据库环境(点击查看)。本文接着演示如何在 Ku......
  • 数据库
    什么是数据库    数据库指的是管理数据的软件、工具,是一个文件系统,而不是额外存储数据的仓库数据库的类型    层次型:以上下级的层次关系来组织数据的一类数据库,类似倒悬树结构,早期的数据库采用    网状型:通过网状关系连接组织数据,形成一张数据网复杂......
  • openGauss学习笔记-66 openGauss 数据库管理-创建和管理schema
    openGauss学习笔记-66openGauss数据库管理-创建和管理schema66.1背景信息schema又称作模式。通过管理schema,允许多个用户使用同一数据库而不相互干扰,可以将数据库对象组织成易于管理的逻辑组,同时便于将第三方应用添加到相应的schema下而不引起冲突。管理schema包括:创建schema......
  • 图数据库之neo4j
    一、Neo4j是一个高性能的,NOSQL图形数据库,它将结构化数据存储在网络上而不是表中。它是一个嵌入式的、基于磁盘的、具备完全的事务特性的Java持久化引擎,但是它将结构化数据存储在网络(从数学角度叫做图)上而不是表中。Neo4j也可以被看作是一个高性能的图引擎,该引擎具有成熟数......
  • Postgresq l 数据库查询格式为jsonp的列,怎么查询其值属性 | ->> 操作符
    要查询PostgreSQL数据库表中的JSONP列(假设列名为props)中是否包含特定条件的记录,可以使用JSONB函数和操作符进行查询。JSONP列通常存储为JSONB类型。假设表结构如下:CREATETABLEyour_table(idserialPRIMARYKEY,propsjsonb);在这个表中,props列存储......
  • 数据库数据恢复-Oracle数据库误执行truncate table的数据恢复案例
    Oracle数据库故障&分析:北京某单位Oracle11gR2数据库误执行truncate table CM_CHECK_ITEM_HIS,表数据丢失,查询该表时报错。数据库备份无法使用,表数据无法查询。Oracle数据库Truncate数据的机理:执行Truncate命令后,ORACLE数据库会在数据字典和Segment Header中更新表的Data O......
  • Navicat 携手华为云GaussDB,联合打造便捷高效的数据库开发和建模工具方案
    本文分享自华为云社区《Navicat携手华为云GaussDB,联合打造便捷高效的数据库开发和建模工具方案》,作者:GaussDB数据库。近日,NavicatPremium顺利完成与华为云GaussDB的兼容性测试认证,并获得华为云授予的技术认证书。Navicat作为华为云GaussDB生态工具合作伙伴以及G......
  • 数据库----初识
    《世界诞生的前夜----开发环境配置》在进入数据库开发软件时遇到这样一个错误:  看起来是SQLServer(数据库管理系统)发生了错误,  找到数据库管理系统设置工具,让SQLServer运行起来就行了......