当前位置: 首页 > news >正文

怎么保证缓存与数据库的最终一致性?

目录

零.读数据的标准操作

一.Cache aside Patten--旁路模式

二.Read/Write Through Pattern--读写穿透

三.Write Back Pattern--写回

四.运用canal监听mysql的binlog实现缓存同步


零.读数据的标准操作

这里想说的是不管哪种模式读操作都是一样的,这是一种统一的规范:

但写操作和同步策略却有不同。

一.Cache aside Patten--旁路模式

这个是最常见的模式。运用于读多写少的情况。

1.为什么采用更新而不是删除
更新缓存:每次更新数据库都更新缓存,无效写操作较多
删除缓存:更新数据库时让缓存失效,查询时再更新缓存
2.我们应当是先操作数据库,再删除缓存,而不应该反过来

原因在于,如果你选择第一种方案,在两个线程并发来访问时,假设线程1先来,他先把缓存删了,此时线程2过来,他查询缓存数据并不存在,此时他写入缓存,当他写入缓存后,线程1再执行更新动作时,实际上写入的就是旧的数据,新的数据被旧数据覆盖了。 

二.Read/Write Through Pattern--读写穿透

Write-Through的潜在使用场景是银行系统。

Write-Through适用情况有:

        需要频繁读取相同数据

        不能忍受数据丢失(相对Write-Behind而言)和数据不一致

在使用Write-Through时要特别注意的是缓存的有效性管理,否则会导致大量的缓存占用内存资源。甚至有效的缓存数据被无效的缓存数据给清除掉。

三.Write Back Pattern--写回

在更新数据的时候,先更新缓存,再异步批量更新数据库。

适合读多写多的操作,如果采用Cache Aside Pattern,由于更新的频繁,也频繁删除缓存。读操作如果很少命中缓存,缓存也失去了意义。

Write Behind Pattern优点是效率很高,数据库压力很小,将数据库的读和写操作多落在缓存上。

缺点是异步增大了数据库和缓存无法强一致的概率。比如说当过期的时候去读取,可能使得同一时间点赞或者取消点赞的数据更改并没有同步到缓存。一般结合前端缓存进行优化用户体验。适用于对数据一致性要求不那么高的场景,比如高并发下的点赞和收藏,还有浏览量等场景。

四.运用canal监听mysql的binlog实现缓存同步

相关文章:

怎么保证缓存与数据库的最终一致性?

目录 零.读数据的标准操作 一.Cache aside Patten--旁路模式 二.Read/Write Through Pattern--读写穿透 三.Write Back Pattern--写回 四.运用canal监听mysql的binlog实现缓存同步 零.读数据的标准操作 这里想说的是不管哪种模式读操作都是一样的,这是一种统一…...

免费SSL通配符证书/SSL泛域名证书获取教程

我们先基本了解什么是SSL证书以及其作用。SSL证书是一种数字证书,它通过为网站提供身份验证和数据加密服务,从而保护网站的用户信息安全。当我们在浏览器的地址栏看到“https”和绿色锁标志时,就表示该网站使用了SSL证书。 那么什么又是通配…...

mysql结构与sql执行流程

Mysql的大体结构 客户端:用于链接mysql的软件 连接池: sql接口: 查询解析器: MySQL连接层 连接层: 应用程序通过接口(如odbc,jdbc)来连接mysql,最先连接处理的是连接层。 连接层…...

vue快速入门(十二)v-key索引标志

注释很详细&#xff0c;直接上代码 新增内容 v-key的使用场景数组筛选器的使用 源码 <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, initial-…...

智能网联汽车自动驾驶数据记录系统DSSAD数据配置

目录 第一章 数据配置一般要求 第二章 数据配置文件中的文件描述 第三章 数据配置文件中的数据描述 第四章 数据配置文件中的数据字典 表A.1 数据字典格式定义 第一章 数据配置一般要求 数据配置文件数据内容应为可读的十进制数据。 数据配置文件应以文件的形式存储在自动驾驶…...

linux知识点

绝对路径用什么符号表示&#xff1f;当前目录、上层目录用什么表示&#xff1f;主目录用什么表示? 切换目录用什么命令 绝对路径&#xff1a; 如/etc/init.d当前目录和上层目录&#xff1a; ./ …/主目录&#xff1a; ~/切换目录&#xff1a; cd 怎么查看当前进程&#xff1f;…...

微信小程序实现滚动标签

使用scroll-view标签可实现组件滚动标签 1、list中 list.wxml代码如下: <!--pages/list/list.wxml--> <navigation-bartitle"小程序" back"{{false}}"color"black" background"#FFF"></navigation-bar><scroll-…...

大语言模型上下文窗口初探(下)

由于篇幅原因&#xff0c;本文分为上下两篇&#xff0c;上篇主要讲解上下文窗口的概念、在LLM中的重要性&#xff0c;下篇主要讲解长文本能否成为LLM的护城河、国外大厂对长文本的态度。 3、长文本是护城河吗&#xff1f; 毫无疑问&#xff0c;Kimi从一开始就用“长文本”占领…...

Java整合ElasticSearch8.13

1、引入Jar包 <dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-data-elasticsearch</artifactId> </dependency> 2、配置ES连接信息 spring:elasticsearch:# 地址uris: http://xxx:9200# 用户…...

2.网络编程-HTTP和HTTPS

目录 HTTP介绍 HTTP协议主要组成部分 GET 和 POST有什么区别 常见的 HTTP 状态码有哪些 http状态码100 HTTP1.1 和 HTTP1.0 的区别有哪些 HTTPS 和 HTTP 的区别是什么 HTTP2 和 HTTP1.1 的区别是什么 HTTP3 和 HTTP2 的区别是什么 HTTPS的请求过程 对称加密和非对称…...

MTK i500p AIoT解决方案

一、方案概述 i500p是一款强大而高效的AIoT平台&#xff0c;专为便携式、家用或商用物联网应用而设计&#xff0c;这些应用通常需要大量的边缘计算&#xff0c;需要强大的多媒体功能和多任务操作系统。该平台集成了Arm Cortex-A73 和 Cortex-A53 的四核集群&#xff0c;工作频…...

ES入门十四:分词器

我们存储到ES中数据大致分为以下两种&#xff1a; 全文本&#xff0c;例如文章内容、通知内容精确值&#xff0c;如实体Id 在对这两类值进行查询的时候&#xff0c;精确值类型会比较它们的二进制&#xff0c;其结果只有相等或者不想等。而对全文本类型进行等值比较是不太实现…...

汇编——SSE打包整数

SSE也可以进行整数向量的加法&#xff0c;示例如下&#xff1a; ;sse_integer.asm extern printfsection .datadummy db 13 align 16pdivector1 dd 1dd 2dd 3dd 4pdivector2 dd 5dd 6dd 7dd 8fmt1 db "Packed Integer Vector 1: %d, %d, %d, %d",…...

动态规划(2)

动态规划&#xff08;2&#xff09; 文章目录 动态规划&#xff08;2&#xff09;1、聪明的寻宝人2、基因检测3、药剂稀释4、找相似串 1、聪明的寻宝人 #include <iostream> using namespace std; void MaxValue(int values[], int weights[], int n, int m) {int dp[21…...

JetBrains IDE 2024.1 发布 - 开发者工具

JetBrains IDE 2024.1 (macOS, Linux, Windows) - 开发者工具 CLion, DataGrip, DataSpell, Fleet, GoLand, IntelliJ IDEA, PhpStorm, PyCharm, Rider, RubyMine, WebStorm 请访问原文链接&#xff1a;JetBrains IDE 2024.1 (macOS, Linux, Windows) - 开发者工具&#xff0…...

C++ 构造函数中的参数顺序

描述&#xff1a; 未初始化的参数必须在初始化参数之前 正确 ✓ 写法&#xff1a; mother(const char* food, const char* lastName"无姓", const char* firstName "无名" ); 错误❌写法&#xff1a; mother(const char* lastName"无姓", …...

Git Flow困境逃脱指南

本来来自极狐GitLab 资源中心&#xff0c;原文链接&#xff1a;https://resources.gitlab.cn/articles/020183ba-cfc0-4917-b901-248acdcfc92f。 GitLab 是一个全球知名的一体化 DevOps 平台&#xff0c;很多人都通过私有化部署 GitLab 来进行源代码托管。极狐GitLab &#xff…...

MySQL的sql_mode模式简介

前言 今天同事使用数据库时报错,排查问题时发现配置文件里的sql_mode配置被人注释了,所以通过查询资料对这个配置进行了下了解。 介绍 mysql为了支持在不同的环境下运行&#xff0c;允许我们给它设置不同的运行模式&#xff08;sql_mode&#xff09;。 不同的运行模式&#…...

性能优化-如何爽玩多线程来开发

前言 多线程大家肯定都不陌生&#xff0c;理论滚瓜烂熟&#xff0c;八股天花乱坠&#xff0c;但是大家有多少在代码中实践过呢&#xff1f;很多人在实际开发中可能就用用Async&#xff0c;new Thread()。线程池也很少有人会自己去建&#xff0c;默认的随便用用。在工作中大家对…...

非关系型数据库-----------Redis的主从复制、哨兵模式

目录 一、redis群集有三种模式 1.1主从复制、哨兵、集群的区别 1.1.1主从复制 1.1.2哨兵 1.1.3集群 二、主从复制 2.1主从复制概述 2.2主从复制的作用 ①数据冗余 ②故障恢复 ③负载均衡 ④高可用基石 2.3主从复制流程 2.4搭建redis主从复制 2.4.1环境准备 2.4…...

使用docx4j转换word为pdf处理中文乱码问题

word转pdf 实现方法 mavendocx4j版本自己酌情升级 实现方法 import org.docx4j.Docx4J; import org.docx4j.fonts.IdentityPlusMapper; import org.docx4j.fonts.Mapper; import org.docx4j.fonts.PhysicalFonts; import org.docx4j.openpackaging.packages.WordprocessingMLP…...

【引子】C++从介绍到HelloWorld

C从介绍到HelloWorld 一、C的介绍1. 简介2. 应用场景3. C的标准![在这里插入图片描述](https://img-blog.csdnimg.cn/direct/e3efb0f207f647729b92c0b5bcd4b330.png)4. C的运行过程 二、Visual Studio的安装1. 什么是Visual Studio2. Visual Studio的安装 三、完成HelloWorld1.…...

Django检测到会话cookie中缺少HttpOnly属性手工复现

一、漏洞复现 会话cookie中缺少HttpOnly属性会导致攻击者可以通过程序(JS脚本等)获取到用户的cookie信息&#xff0c;造成用户cookie信息泄露&#xff0c;增加攻击者的跨站脚本攻击威胁。 第一步&#xff1a;复制URL&#xff1a;http://192.168.43.219在浏览器打开&#xff0c;…...

2024数字城市建设博览会:一站式平台,满足多元需求

2024数字城市建设博览会&#xff1a;引领未来城市发展的风向标 2024年&#xff0c;一场前所未有的盛会——数字城市建设博览会暨交流大会&#xff0c;将在雄安这座未来之城拉开帷幕。本次大会不仅是数字经济全产业链的精英集结&#xff0c;更是一场汇聚了众多优质项目和丰富客…...

iOS 17.5系统或可识别并禁用未知跟踪器,苹果Find My技术应用越来越合理

苹果公司去年与谷歌合作&#xff0c;宣布将制定新的行业标准来解决人们日益关注的跟踪器隐私问题。苹果计划在即将发布的 iOS 17.5 系统中加入这项提升用户隐私保护的新功能。 科技网站 9to5Mac 在苹果发布的 iOS 17.5 开发者测试版内部代码中发现了这项反跟踪功能的蛛丝马迹…...

关于搭建elk日志平台

我这边是使用docker compose进行的搭建 所以在使用的时候 需要自行提前安装docker以及dockercompose环境 或者从官网下载对应安装包也可以 具体文章看下一章节&#xff1a;【ELK】搭建elk日志平台&#xff08;使用docker-compose&#xff09;&#xff0c;并接入springboot项目...

【全套源码教程】基于SpringBoot+MyBatis+Vue的流浪动物救助网站的设计与实现

目录 前言 需求分析 可行性分析 技术实现 后端框架&#xff1a;Spring Boot 持久层框架&#xff1a;MyBatis 前端框架&#xff1a;Vue.js 数据库&#xff1a;MySQL 功能介绍 前台界面功能介绍 动物领养及捐赠 宠物论坛 公告信息 商品页面 寻宠服务 个人中心 购…...

Word wrap在计算机代表的含义(自动换行)

“Word wrap”是一个计算机术语&#xff0c;用于描述文本处理器在内容超过容器边界时自动将超出部分转移到下一行的功能。在多种编程语言和文本编辑工具中&#xff0c;都有实现这一功能的函数或选项。 在编程中&#xff0c;例如某些编程语言中的wordwrap函数&#xff0c;能够按…...

室友打团太吵?一条命令让它卡死

「作者主页」&#xff1a;士别三日wyx 「作者简介」&#xff1a;CSDN top100、阿里云博客专家、华为云享专家、网络安全领域优质创作者 「推荐专栏」&#xff1a;更多干货&#xff0c;请关注专栏《网络安全自学教程》 SYN Flood 1、hping3实现SYN Flood1.1、主机探测1.2、扫描端…...

RabbitMQ3.13.x之八_RabbitMQ中数据文件和目录位置

RabbitMQ3.13.x之_RabbitMQ中数据文件和目录位置 文章目录 RabbitMQ3.13.x之_RabbitMQ中数据文件和目录位置1. 概述2. 覆盖位置1. 路径和目录名称限制2.所需的文件和目录权限 3. 环境变量4. Linux、macOS、BSD上的默认位置5. Windows上的默认位置6. 通用二进制构建默认值 1. 概…...

wordpress建站云盘/百度搜索大数据

计算机网络管理员(二级就交换技术而言&#xff0c;局域网中的以太网采用的是10&#xff0e;在OSI的模型中&#xff0c;主要功能是在通信子网中实现路由选择的是 网络层 。11&#xff0e;FDDI使用___令牌环___介质访问控制方法。12&#xff0e;POP3服务器通常在TCP的___110___端…...

网站公司模板/线上推广策划方案

#include "ESP8266WiFi.h"#include "math.h" //d 10^(A-(abs(rssi)) / (10 * n)) 信号强度 #define N 45 //N 10 * n ,其中n为环境衰减因子&#xff0c;3.25-4.5 #define A -35 //接收机和发射机间隔1m时的信号强度void setu…...

网站建设费一般多少/优化网站结构一般包括

导语 使用编译的方式来安装 PHP 7。 安装编译工具、依赖包 输入 yum -y install libxml2 libxml2-devel openssl openssl-devel curl-devel libjpeg-devel libpng-devel freetype-devel libmcrypt-devel mhash gd gd-devel 进行安装&#xff0c;可以根据自己的实际情况进行调整…...

WordPress的login在哪里改/网站关键词优化教程

四足机器人8个舵机实现蜘蛛类的的仿生运动arduino源代码说明&#xff1a; 通过8个舵机 实现蜘蛛类的的仿生运动&#xff0c;文件包含所有的打印件及嵌入程序&#xff0c;提供arduino源代码&#xff0c;实现10多种运动模式&#xff0c;可以通过蓝牙或者wifi控制。 #include #inc…...

合肥网站建设推广/百度快速排名技术培训

http://poj.org/problem?id1984 这是一道经典的带权并查集&#xff0c;每插入一个点&#xff0c;维护两个权值的数组&#xff0c;代表关于根节点的x坐标和y坐标&#xff0c; 记录这两个权值数组就可以了。W是x减&#xff0c;E是x加&#xff0c;N是y减&#xff0c;S是y加。 合…...

厦门网站建设公司怎么选/百度网站大全旧版

欢迎关注”生信修炼手册”!UROPA是一个命令行工具&#xff0c;可以对基因组区域进行注释&#xff0c;这里的基因组区域要求是BED格式&#xff0c;比如chip&#xff0c;ATAC_seq等数据产生的peak区间。同时需要提供一个GTF格式的基因组注释信息&#xff0c;比如从UCSC,ensemble,…...