只要使用缓存,就可能涉及到 Redis 缓存与数据库 双存储双写,只要是双写,就一定会有数据一致性的问题!
你是如何解决数据一致性问题的?
- 采用 双检加锁 策略
多个线程同时去查询数据库的这条数据,那么我们可以在第一个查询数据的请求上使用一个 互斥锁
来锁住它。其他的线程走到这一步拿不到锁就等着,等第一个线程查询到了数据,然后做缓存
。后面的线程进来发现已经有缓存了,就直接走缓存。
纵有疾风起, 人生不言弃
只要使用缓存,就可能涉及到 Redis 缓存与数据库 双存储双写,只要是双写,就一定会有数据一致性的问题!
多个线程同时去查询数据库的这条数据,那么我们可以在第一个查询数据的请求上使用一个 互斥锁
来锁住它。其他的线程走到这一步拿不到锁就等着,等第一个线程查询到了数据,然后做缓存
。后面的线程进来发现已经有缓存了,就直接走缓存。
提示
本文档只讲解微服务的基础使用,想要了解深层次的原理请跳过,避免耽误时间!!
所有代码均在GitHub,需要请自取
提示
本文档只讲解微服务的基础使用,想要了解深层次的原理请跳过,避免耽误时间!!
所有代码均在GitHub,需要请自取
关系型数据库绝对是 DBMS 的主流,其中使用最多的 DBMS 分别是 Oracle、 MySQL 和 SQL Server。
这些都是关系型数据库(RDBMS)。
这种类型的数据库是 最古老
的数据库类型,关系型数据库模型是把复杂的数据结构归结为简单的 二元关系 (即二维表格形式)。
SQL(Structured Query Language,结构化查询语言)是使用关系模型的数据库应用语言, 与数据直 接打交道 ,由 IBM 上世纪70年代开发出来。后由美国国家标准局(ANSI)开始着手制定SQL标准, 先后有 SQL-86 , SQL-89 , SQL-92 , SQL-99
等标准。
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
等。函数的分类
子查询指一个查询语句嵌套在另一个查询语句内部的查询,这个特性从MySQL 4.1开始引入。
SQL 中子查询的使用大大增强了 SELECT 查询的能力,因为很多时候查询需要从结果集中获取数据,或者 需要从同一个表中先计算得出一个数据结果,然后与这个数据结果(可能是某个标量,也可能是某个集 合)进行比较。
子查询其实就相当于变成语言中的嵌套FOR循环
一个完整的数据存储过程总共有 4 步,分别是创建数据库、确认字段、创建数据表、插入数据。
数据库名、表名不得超过30个字符,变量名限制为29个
必须只能包含 A–Z, a–z, 0–9, _共63个字符
数据库名、表名、字段名等对象名中间不要包含空格
同一个MySQL软件中,数据库不能同名;同一个库中,表不能重名;同一个表中,字段不能重名
必须保证你的字段没有和保留字、数据库系统或常用方法冲突。如果坚持使用,请在SQL语句中使 用`(着重号)引起来
常见数据类型的属性,如下:
整数类型一共有 5 种,包括 TINYINT、SMALLINT、MEDIUMINT、INT(INTEGER)和 BIGINT。
它们的区别如下表所示
M
: 表示显示宽度,M的取值范围是(0, 255)。例如,int(5):当数据宽度小于5位的时候在数字前面需要用 字符填满宽度。该项功能需要配合“ ZEROFILL ”使用,表示用“0”填满宽度,否则指定显示宽度无效。
为什么需要约束?
数据完整性(Data Integrity)是指数据的精确性(Accuracy)和可靠性(Reliability)。它是防止数据库中 存在不符合语义规定的数据和防止因错误信息的输入输出造成无效操作或错误信息而提出的。
为了保证数据的完整性,SQL规范以约束的方式对表数据进行额外的条件限制。从以下四个方面
考虑: