MySQL 

1. 数据库与缓存的一致性

引入缓存,因为缓存只是数据库数据的副本,那么就可能存在副本和原数据不一致的情况

一致性

ACID里面的C,和CAP中的C不是一个概念,虽然都叫一致性。CAP中的C,指的是多个副本之间逻辑上要相等。ACID里面的C,指的是多个数据在逻辑上的约束关系,比如转账时A账户减少了100,对应B账户一定要加上100

不建议使用缓存的场景

查询频率低的数据:就算有LRU算法,面对访问频率低但是占用空间大的数据,空间的利用率也不高

更新频率高的数据:缓存命中率低

数据一致性要求极高的数据:也不建议使用缓存

引起不一致的场景分析

删除数据

情况一:缓存中当前没有数据。此时缓存中没有副本,当然没有一致性的问题

情况二:缓存中有当前数据。

        此时如果先删缓存、再删数据库。

        先删数据库、再删缓存

可以看到,以上两种场景都会导致缓存中有老数据,而数据库中最终没有数据。这是因为出现这种并发问题,我们没有办法控制这种时序问题,所以,这就是一个概率性问题

更新数据

先更新数据库、再更新缓存

以上也是时序执行不同导致的一个概率性问题

目前主流一致性解决策略cache aside

  • 读数据时,先读缓存,如果有就返回。没有再读数据源,将数据放到缓存
  • 写数据时,先写数据源,然后删除缓存

都是会把缓存中的数据删掉,后续查询查不到缓存就从数据库中取最新的数据

弊端:

Cache Aside 不能保证一致性上绝对不出问题

Cache Aside 并不能保证强一致性,不然也就不会有 Paxos 这种复杂的共识算法了

  • 考虑redis做缓存时,必然就必须容忍一定的数据不一致的可能
  • 考虑让redid做数据库我没用过

缓存的兜底策略
  • 因为Cache Aside 并不能保证强一致性,因为很难保证操作数据库和操作缓存的操作的原子性,除非加分布式锁。
  • 所以,总有极少数不一致的场景,所以最后都要加一个超时时间,避免长时间的缓存数据与数据库中不一致

异步化解决缓存一致性

canal监听binlog,然后发MQ,然后监听MQ来刷新缓存。

异步化解决方案的优势,将一致性解决方案,与业务代码进行解耦。第二个是同步操作缓存的性能肯定没有异步化高

异步化的缺点是,需要单独维护一套canal和MQ的中间件,如果中间件挂了,会产生影响

业务操作数据库的模块,和监听MQ去刷新缓存的模块,是否应该放在同一个微服务中?

有的公司是采取的把监听模块独立出来,但是也有公司将监听MQ去刷新缓存的模块仍放在原来的业务操作数据库的模块中,是没有拆分的

我倾向于每个微服务自己管理自己的存储细节,不要暴露给外部,所以监听MQ获取MQ中的数据库记录的各个字段,从而更新到缓存中去的功能,我是更倾向于放在原有业务模块中,不暴露出去

参考视频:大厂一致性方案补充,优缺点分析,微服务设计权衡思考_哔哩哔哩_bilibili

2. 缓存穿透、雪崩

参考视频:经典面试题,大厂几个巧妙的方案,复杂高并发系统缓存设计_哔哩哔哩_bilibili

3. 连接池配置

数据库连接池到底该设置多大才合适?_哔哩哔哩_bilibili

1,连接池太小最开始只有10个连接,慢SQL长达几秒,长期占用连接

2,通过压测发现连接池一般设置为50比较合适

3,学习hikariCP的各种使用特性

HikariCP连接池详细配置优化方案-java教程-PHP中文网

4. MySQL三大日志

面试官内心os:MySQL三大日志还得是你讲的好_哔哩哔哩_bilibili

通过Mysql的日志设计我们学到:要保证持久化就得记日志,对于连续写的日志最好搞一个Cache,先写cache然后异步刷盘。通过日志就能做备份恢复,主从同步

redis的rdb和aof也是这个逻辑

binlog和redolog如何保证数据的一致性

redo log和binlog如何保证一致性:将redo log的写拆成两个步骤,prepare 和commit也就是两阶段提交

两阶段提交的成功关键,还是要看bin log,只要bin log刷盘了,那就能提交事务

MVCC有了解嘛

(YY直播一面)

5. MySQL分页

select * from people

where id > 8000000 and age > 10

order by id 

limit 100

参考视频:毕业第一次发布就有高并发经验了!有惊无险!_哔哩哔哩_bilibili

6. 慢查询

隐式转换造成索引失效

关注mybatis会自动进行java Date类型到数据库Timestamp类型的转换,但是数据的create_time字段是Date类型

隐式类型转换发生在索引字段时,会导致索引失效,索引失效也就导致慢查询

参考链接:一次慢查询暴露的隐蔽的问题

7. MySQL与ES同步

参考链接:4 种 MySQL 同步 ES 方案,yyds!

主流还是canal

8. 索引


索引覆盖和索引下推是什么?

锁住余额,为何还会更新异常?

MVCC多版本控制

1)多版本控制: 指的是一种提高并发的技术。最早的数据库系统,只有读读之间可以并发,读写,写读,写写都要阻塞。引入多版本之后,只有写写之间相互阻塞,其他三种操作都可以并行,这样大幅度提高了InnoDB的并发度。在内部实现中,与Postgres在数据行上实现多版本不同,InnoDB是在undolog中实现的,通过undolog可以找回数据的历史版本。找回的数据历史版本可以提供给用户读(按照隔离级别的定义,有些读请求只能看到比较老的数据版本),也可以在回滚的时候覆盖数据页上的数据。在InnoDB内部中,会记录一个全局的活跃读写事务数组,其主要用来判断事务的可见性

2)文中还有一个关于多版本并发控制的例子,可以记一下

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若转载,请注明出处:http://www.pswp.cn/web/94497.shtml
繁体地址,请注明出处:http://hk.pswp.cn/web/94497.shtml
英文地址,请注明出处:http://en.pswp.cn/web/94497.shtml

如若内容造成侵权/违法违规/事实不符,请联系英文站点网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【Java】 Spring Security 赋能 OAuth 2.0:构建安全高效的现代认证体系

还在为高昂的AI开发成本发愁?这本书教你如何在个人电脑上引爆DeepSeek的澎湃算力! 在当今数字化时代,认证与授权已成为应用系统安全的核心。OAuth 2.0 作为一种开放标准协议,广泛应用于第三方授权场景中,而 Spring Security 则提供了强大的框架支持来实现这一协议。本文深…

实际工作几月后常用相关命令笔记记录

目前,我这只工程师幼崽经历几个月的工作,不能说是收获很多,也算是成长经验1吧。主要工作后才知道好多东西都是自己不会的不了解的,但是工作需要不一定自己完全吃透,在合适的地方正确的使用一般情况就ok了,所…

突破传统文本切片的瓶颈:AntSK-FileChunk语义切片技术详解前言:为什么我们需要重新思考文本切片?

在当今大语言模型(LLM)应用蓬勃发展的时代,我们面临着一个看似简单却至关重要的问题:如何有效地处理长文本?无论是构建知识库、实现RAG(检索增强生成)系统,还是进行文档智能分析&…

LeetCode-542. 01 矩阵

1、题目描述给定一个由 0 和 1 组成的矩阵 mat ,请输出一个大小相同的矩阵,其中每一个格子是 mat 中对应位置元素到最近的 0 的距离。两个相邻元素间的距离为 1 。示例 1:输入:mat [[0,0,0],[0,1,0],[0,0,0]] 输出:[[…

Elasticsearch如何确保数据一致性?

Elasticsearch 通过多种机制确保数据在分布式环境中的一致性,但由于其分布式和近实时(Near Real-Time, NRT)的特性,它提供的是最终一致性(Eventual Consistency),而非强一致性。以下是核心机制和…

2026毕设选题-大数据-基于 Spring Boot的化妆品推荐系统的设计与实现

技术范围:大数据、物联网、SpringBoot、Vue、SSM、HLMT、小程序、PHP、Nodejs、Python、爬虫、数据可视化、安卓App、机器学习等设计与开发。 主要内容:功能设计、开题报告、任务书、中期检查PPT、系统功能实现、代码编写、论文编写和辅导、论文降重、长…

数据结构算法:顺序表

数据结构:顺序表一.寄包柜1.题目如何创建数组?1. 需求本质2. 传统静态数组的缺陷3. 动态方案:向量的数组4. 核心逻辑5. 关键优势总结2.解题思路2.1题目分析2.2具体解题逻辑拆解步骤2.3总结2.4参考代码二.移动零1.题目2.解题思路2.1**解题核心…

IIS 安装了.netcore运行时 还是报错 HTTP 错误 500.19

IIS 安装了.netcore运行时 还是报错 HTTP 错误 500.19 - Internal Server Error 错误代码 0x8007000d 我甚至是先安装的SDK,再安装的运行时runtime的安装包,都不行。 而且在IIS的模块中,找不到 AspNetCoreModuleV2。 最后在微软官网n…

Flink 滑动窗口实战:从 KeyedProcessFunction 到 AggregateFunction WindowFunction 的完整旅程

一、业务背景 我们要在 Flink 实时流上统计 每个用户-品牌组合最近 1 小时的最晚行为时间,并且每 5 分钟更新一次结果。 数据来自 Kafka,事件类型为 CartEvent: public class CartEvent {public String userId;public String brandId;public …

Kubernetes“城市规划”指南:告别资源拥堵与预算超支,打造高效云原生都市

导读: 如果把你的Kubernetes集群想象成一座拔地而起的现代化大都市,那么你,平台工程师,就是这座城市的首席规划师。然而,为何我们精心打造的许多“云原生都市”正迅速陷入交通拥堵、资源闲置和预算超支的困境&#xff…

2.4 Flink运行时架构:Task、SubTask、ExecutionGraph的关系

在理解Flink运行时架构之前,我们先用一个生活化的比喻来建立直观认识: 想象你是一家大型工厂的总经理,需要生产一批复杂的产品。你会怎么做? 制定生产计划:首先画出生产流程图,明确每个环节的工作内容分解任…

`mysql_query()` 数据库查询函数

1) 函数的概念与用途 mysql_query() 是 MySQL C API 中的核心函数,用于向 MySQL 服务器发送 SQL 查询语句。这个函数充当了 C/C 应用程序与 MySQL 数据库之间的桥梁,允许程序执行各种数据库操作。 可以将 mysql_query() 想象成一个"数据库信使"…

[系统架构设计师]通信系统架构设计理论与实践(十七)

[系统架构设计师]通信系统架构设计理论与实践(十七) 一.通信系统网络架构 形式: 局域网,广域网,移动通信网 1.局域网网络架构 单一机构专用计算机的网络 组成:计算机,交换机,路由器 特点&#x…

【赵渝强老师】Docker的私有镜像仓库:Harbor

Harbor是由VMware公司开发并开源的企业级的Docker镜像仓库的管理项目,它包括镜像的权限管理(RBAC)、目录访问(LDAP)、日志审核、管理界面、自我注册、镜像复制和中文支持等功能。 视频讲解如下 【赵渝强老师】Docker的…

【QT/C++】实例理解类间的六大关系之泛化关系(Generalization)

【QT/C】实例理解类间的六大关系之泛化关系(Generalization) 在前面章节一文完美概括UML类图及其符号(超详细介绍)中已经对泛化关系的概念进行了总结,本文我将用实际案例来进一步理解泛化关系,以便应对未来…

【微服务的数据一致性分发问题】究极解决方案

文章目录一、微服务数据分发1、简介2、典型场景(1)跨服务业务流程协同(2)数据副本同步(读写分离)(3)实时状态通知(4)数据聚合与统计分析(5&#x…

挖币与区块链技术有怎样的联系?

挖币(通常指加密货币挖矿)与区块链技术有着紧密的联系,挖矿是区块链网络维持运行和安全的重要机制之一,具体联系如下:1. 挖矿是区块链共识机制的核心环节区块链通过“共识机制”确保全网节点对交易记录达成一致&#x…

C数据结构:二叉树(下)

C数据结构:二叉树(下) 1.二叉树递归结构遍历 2.例题 3.二叉树的性质 1.二叉树递归结构遍历 我们先创建一个如下图所示的二叉树。typedef int BTDataType; typedef struct BinaryTreeNode {BTDataType data;struct BinaryTreeNode* left;struc…

Linux系统的网络管理(一)

一、网络参数配置:搭建稳定网络基础网络参数配置是 Linux 网络管理的起点,根据操作方式可分为图形化配置、命令行配置和配置文件配置,不同方式适用于不同场景(临时调试 / 永久生效)。1. 图形化配置:依赖 Ne…

Web程序设计

一、控件基础 文本框、按钮事件的使用 <% Page Language"C#" AutoEventWireup"true" CodeFile"User_Login.aspx.cs" Inherits"User_Login" %><!DOCTYPE html><html xmlns"http://www.w3.org/1999/xhtml"&g…