首页 > 其他分享 >缓存一致性如何保障

缓存一致性如何保障

时间:2023-06-24 18:44:41浏览次数:31  
标签:缓存 保障 存储系统 更新 应用程序 一致性 数据

缓存在现代应用程序中被广泛使用,用于提高性能和降低对后端数据存储系统的负载。然而,使用缓存也带来了一个重要问题:缓存一致性。在分布式系统中,缓存一致性成为了一个挑战,因为我们需要确保缓存中的数据与后端数据存储系统的数据保持同步,以避免数据不一致的情况发生。

Cache Aside Pattern(先写库再删缓存)

Cache Aside Pattern 是一种常见的缓存设计模式,用于在应用程序中有效地利用缓存来提高性能和降低对后端数据存储系统的负载。该模式的核心思想是将缓存视为数据检索的副本,并在需要访问数据时先查询缓存。如果缓存中存在所需数据,则直接从缓存中获取;如果缓存中不存在所需数据,则从后端数据存储系统(如数据库)中获取,并将数据添加到缓存中以供下次使用。

读取数据时:

  • 应用程序首先查询缓存,检查所需数据是否已经存在于缓存中。
  • 如果缓存中存在数据,则直接返回缓存中的数据。
  • 如果缓存中不存在数据,则从后端数据存储系统中获取数据,并将数据添加到缓存中,以便下次访问时能够直接从缓存中获取。

写入/更新数据时:

  • 应用程序首先更新后端数据存储系统中的数据。
  • 然后,应用程序使缓存中与被更新数据相关的缓存项失效,以保持缓存中的数据与后端数据存储系统的一致性。

更新缓存时,不使用更新,而是删除

删除缓存:在数据更新完成后,即刻删除对应的缓存项。这样做是为了确保下一次使用该数据时,会从后端数据存储系统读取最新的数据而不是过期的缓存值。
image

为什么不可以先更新缓存,再更新库

并发操作导致数据不一致:假设有多个同时请求需要修改同一个数据项,如果先删除缓存再写数据库,可能会导致并发操作之间的数据不一致。这是因为在删除缓存的时间窗口内,其他请求可能会读取到旧的缓存值,而不是最新的数据库值。
image

应该先更新库,再更新缓存

image

就算先更新库,再更新缓存,还是会有极端情况出现导致不一致

image

解决方案,延迟双删

image

最后总结

  • 要保证缓存与数据库强一致,最好的办法是分布式锁,但那样并发性能就完蛋。
  • Cache Aside Pattern + 延迟双删无锁方案只能在保证并发的前提下尽可能减少不一致的可能。

标签:缓存,保障,存储系统,更新,应用程序,一致性,数据
From: https://www.cnblogs.com/lgxlsm/p/17501486.html

相关文章

  • 缓存优化
    前言:经过前面linux,redis,git的学习介绍,我们至此进入项目优化阶段1. 项目问题  1-1用户数量多,系统访问量大频繁访问数据库,系统性能下降,用户体验差2. 环境搭建  1-2将我们的项目推送远程仓库   1-2在创建一个新的分支,在次分支上进行项目优化将v1.0 分支也推送远程仓库2.1 m......
  • ASP.NET Core MVC 从入门到精通之缓存
    随着技术的发展,ASP.NETCoreMVC也推出了好长时间,经过不断的版本更新迭代,已经越来越完善,本系列文章主要讲解ASP.NETCoreMVC开发B/S系统过程中所涉及到的相关内容,适用于初学者,在校毕业生,或其他想从事ASP.NETCoreMVC系统开发的人员。经过前几篇文章的讲解,初步了解ASP.NETCore......
  • 2023-06-23:redis中什么是缓存击穿?该如何解决?
    2023-06-23:redis中什么是缓存击穿?该如何解决?答案2023-06-23:缓存击穿是指一个缓存中的热点数据非常频繁地被大量并发请求访问,当该热点数据失效的瞬间,持续的大并发请求无法通过缓存获取到数据,而直接访问数据库,这就好像在一个稳固完好的容器上打开了一个洞。解决缓存击穿问题的方......
  • WordPress开启Nginx FastCGI Cache缓存
    本文转载自:WordPress开启NginxFastCGICache缓存更多内容请访问钻芒博客:https://www.zuanmang.netWordPress速度优化始终是一个没有尽头的课题,最近逛几个技术大佬的站点发现都用了Nginx缓存,遂搜集资料展开部署。教程分享如下Ps.由于钻芒博客是通过Nginx反响代理到本地内网访问......
  • WordPress开启Nginx Redis Cache缓存 解决FastCGI Cache内网穿透兼容问题
    本文转载自:WordPress开启NginxRedisCache缓存解决FastCGICache内网穿透兼容问题更多内容请访问钻芒博客:https://www.zuanmang.net上回说到,Wordpress配合NginxFastCGICache缓存可以极大提升速度体验,但钻芒博客由于是通过Nginx反向代理所以使用起来纯在一定兼容问题,比如缓......
  • Java基础之基本数据类型封装类的缓存
    巨人的肩膀:https://blog.csdn.net/hnjcxy/article/details/1237872091、Java中基本数据类型byte、short、char、int、long、float、double、boolean有对应的封装类型:Byte、Short、Character、Integer、long、Float、Double,Boolean其中Byte、Short、Character、Integer、Long、Bo......
  • 前端缓存【http缓存 | 浏览器缓存】
    一、前端缓存分类【http缓存|浏览器缓存】1、http缓存分类:强缓存 协商缓存   都是服务端设置HTTPHeader来实现的(1)强缓存不需要发送请求到服务端,直接读取浏览器本地缓存//在Chrome的Network中显示的HTTP状态码是200在Chrome中,强缓存又分为DiskCac......
  • 一致性哈希算法
    请求和后端ip地址计算hash值%2^32。把请求转给按顺时针找到的后端IP。如果后端IP挂了,原本转给其他后端IP的请求不变。为了增强均衡性,可以增加虚拟节点。参考资料nginx负载均衡/一致性哈希......
  • C:\Windows\Installer\ 存储安装程序的数据库 修复和更改安装程序 安装程序的缓存
    C:\Windows\Installer\是一个特殊的系统文件夹,在Windows操作系统中扮演着重要的角色。它主要用于存储安装程序的相关信息和安装源。具体来说,C:\Windows\Installer\文件夹有以下几个作用和功能:存储安装程序的数据库:文件夹中包含一个名为"Installer"的数据库文件(即MSI数据库),......
  • 数据质量的监测和管理:确保数据的准确性和一致性
    目录1.引言2.数据质量的概念3.数据质量的监测和管理3.1.数据质量度量3.2.数据质量监控工具3.3.数据质量分析和模型3.4.数据质量模型4.数据质量的监测与管理流程4.1.需求分析4.2.数据采集4.3.数据清洗4.4.数据质量度量4.5.数据分析4.6.数据质量评估4.7.数据质量治理......