跳至主要內容

Mr.SharkMelon

纵有疾风起, 人生不言弃

缓存双写一致性问题

只要使用缓存,就可能涉及到 Redis 缓存与数据库 双存储双写,只要是双写,就一定会有数据一致性的问题!

image-20240416203555111

你是如何解决数据一致性问题的?

  • 采用 双检加锁 策略

多个线程同时去查询数据库的这条数据,那么我们可以在第一个查询数据的请求上使用一个 互斥锁来锁住它。其他的线程走到这一步拿不到锁就等着,等第一个线程查询到了数据,然后做缓存。后面的线程进来发现已经有缓存了,就直接走缓存。


鲨瓜...大约 6 分钟Redis缓存MySQL数据一致性
一、概述

1.1 RDBMS 和 非 RDBMS

关系型数据库绝对是 DBMS 的主流,其中使用最多的 DBMS 分别是 Oracle、 MySQL 和 SQL Server。

这些都是关系型数据库(RDBMS)。

1.1.1 关系型数据库(RDBMS)

这种类型的数据库是 最古老 的数据库类型,关系型数据库模型是把复杂的数据结构归结为简单的 二元关系 (即二维表格形式)。

image-20240107131342618.png

鲨瓜...大约 4 分钟数据库数据库MySQL
二、SQL

SQL(Structured Query Language,结构化查询语言)是使用关系模型的数据库应用语言, 与数据直 接打交道 ,由 IBM 上世纪70年代开发出来。后由美国国家标准局(ANSI)开始着手制定SQL标准, 先后有 SQL-86 , SQL-89 , SQL-92 , SQL-99 等标准。

2.1 SQL的分类

  • DDL(Data Definition Languages、数据定义语言)

    • 这些语句定义了不同的数据库、表、视图、索 引等数据库对象,还可以用来创建、删除、修改数据库和数据表的结构
    • 主要的语句关键字包括 CREATE 、 DROP 、 ALTER、TRUNCATE 等。
  • DML(Data Manipulation Language、数据操作语言)

    • 用于添加、删除、更新和查询数据库记 录,并检查数据完整性。
    • 主要的语句关键字包括 INSERT 、 DELETE 、 UPDATE 、 SELECT 等。
    • DML 是SQL中最基础的,也是最为重要的
  • DCL(Data Control Language、数据控制语言)

    • 用于定义数据库、表、字段、用户的访问权限和 安全级别。
    • 主要的语句关键字包括 GRANT 、 REVOKE 、 COMMIT 、 ROLLBACK 、 SAVEPOINT 等。

鲨瓜...大约 12 分钟数据库数据库MySQL
三、函数

函数的分类

image-20240120180848000
  • 操作数据对象
  • 接受参数返回一个结果
  • 只对一行进行变换
  • 每行返回一个结果
  • 可以嵌套
  • 参数可以是一列或一个值

3.1 单行函数

3.1.1 数值函数

(1)基本函数


鲨瓜...大约 12 分钟数据库数据库函数MySQL
四、子查询

子查询指一个查询语句嵌套在另一个查询语句内部的查询,这个特性从MySQL 4.1开始引入。

SQL 中子查询的使用大大增强了 SELECT 查询的能力,因为很多时候查询需要从结果集中获取数据,或者 需要从同一个表中先计算得出一个数据结果,然后与这个数据结果(可能是某个标量,也可能是某个集 合)进行比较。

子查询其实就相当于变成语言中的嵌套FOR循环

4.1 提出需求并解决

image-20240121190639539

鲨瓜...大约 6 分钟数据库数据库MySQL
五、 创建和管理表

一个完整的数据存储过程总共有 4 步,分别是创建数据库、确认字段、创建数据表、插入数据。

image-20240225160621281

5.1 标识符命名规则

数据库名、表名不得超过30个字符,变量名限制为29个

必须只能包含 A–Z, a–z, 0–9, _共63个字符

数据库名、表名、字段名等对象名中间不要包含空格

同一个MySQL软件中,数据库不能同名;同一个库中,表不能重名;同一个表中,字段不能重名

必须保证你的字段没有和保留字、数据库系统或常用方法冲突。如果坚持使用,请在SQL语句中使 用`(着重号)引起来


鲨瓜...大约 3 分钟数据库数据库MySQL
六、 MYSQL中的数据类型

常见数据类型的属性,如下:

image-20240302134320608

6.1 整型

整数类型一共有 5 种,包括 TINYINT、SMALLINT、MEDIUMINT、INT(INTEGER)和 BIGINT。

它们的区别如下表所示

image-20240302133735988

6.1.1 可选属性

(1) M

M : 表示显示宽度,M的取值范围是(0, 255)。例如,int(5):当数据宽度小于5位的时候在数字前面需要用 字符填满宽度。该项功能需要配合“ ZEROFILL ”使用,表示用“0”填满宽度,否则指定显示宽度无效。


鲨瓜...大约 13 分钟数据库数据库MySQL
七、 约束

7.1 约束概念

为什么需要约束?

数据完整性(Data Integrity)是指数据的精确性(Accuracy)和可靠性(Reliability)。它是防止数据库中 存在不符合语义规定的数据和防止因错误信息的输入输出造成无效操作或错误信息而提出的。

为了保证数据的完整性,SQL规范以约束的方式对表数据进行额外的条件限制。从以下四个方面考虑:

  • 实体完整性(Entity Integrity) :例如,同一个表中,不能存在两条完全相同无法区分的记录
  • 域完整性(Domain Integrity) :例如:年龄范围0-120,性别范围“男/女
  • 引用完整性(Referential Integrity) :例如:员工所在部门,在部门表中要能找到这个部门
  • 用户自定义完整性(User-defined Integrity) :例如:用户名唯一、密码不能为空等,本部门 经理的工资不得高于本部门职工的平均工资的5倍

鲨瓜...大约 12 分钟数据库数据库MySQL