MySQL 学习记录
MySQL 概述数据库(Database)是按照数据结构来组织、存储和管理数据的仓库。MySQL 是一个关系型数据库管理系统,由瑞典 MySQL AB 公司开发,目前属于 Oracle 公司。MySQL 是一种关联数据库管理系统,关联数据库将数据保存在不同的表中,而不是将所有数据放在一个大仓库内,这样就增加了速度并提高了灵活性。 主要特性 多线程 提供事务性和非事务性的存储 使用非常快的 B 树磁盘表并具有索引压缩 使用非常快的基于线程的内存分配系统 使用优化的嵌套循环连接执行非常快的连接 使用哈希表作临时表 内置了对 SQL 语句的支持来检查,优化和修复表 MySQL 处理约束MySQL 中的约束(Constraints)用于保证数据库表中数据的完整性和一致性,防止无效或不合理的数据进入表中。在 MySQL 中约束的处理方式与存储引擎、事务机制密切相关。 存储引擎与约束、事务的关系 事务型存储引擎(InnoDB 默认),支持事务,支持检查所有约束,约束检查与事务回滚机制联动 非事务存储引擎,不支持事务,仅支持主键、唯一、非空约束,不支持外键和事务,约束违反时操作直接操作失败,...
AMQP学习记录
AMQP 概述由于 RabbitMQ 消息组件设计开发是遵循着 AMQP 的开发协议展开的,所以这里先介绍 AMQP 方便我们学习 RabbitMQ在所有的异构系统或者高并发系统之中,一般都会使用消息组件来实现高峰流量业务的处理操作,传统的程序开发之中,追求的模式是快速响应处理,用户只要发出了响应,那么随后就要立刻执行该业务的处理操作,这样的设计会导致在高并发状态下的请求的拥堵。引入消息组件,那么就相当于提供了一个操作的缓冲区。 为了解决消息组件的一个传输性能以及消息服务的标准化问题,所以提供了 AMQP 的处理协议,只要基于此协议的开发的消息组件,就可以直接在任何的编程语言上实现。Rabbit 独立用 Erlang 开发了 RabbitMQ AMQP 提供统一消息服务的应用层标准协议,该协议属于一种二进制协议,只要基于此协议的客户端与消息中间件都可以实现消息的传递,从整体来讲 AMQP 协议可以分为三层整体架构:
RabbitMQ学习记录
初识 MQ(消息队列)消息指的是两个应用间传递的数据。数据的类型有很多种形式,可能只包含文本字符串,也可能包含嵌入对象。 “消息队列(Message Queue)”是在消息的传输过程中保存消息的容器。在消息队列中,通常有生产者和消费者两个角色。生产者只负责发送数据到消息队列,谁从消息队列中取出数据处理,他不管。消费者只负责从消息队列中取出数据处理,他不管这是谁发送的数据。 消息队列的作用 解耦:当有多个线程需访问某个相同线程的数据时,该线程通过对应的方法来与请求调用的线程通信。为了降低这种强耦合,就可以使用 MQ,我们只需要把数据发送到 MQ,其他系统如果需要数据,则从 MQ 中获取即可。 应用:当用户发出一个支付请求时,支付服务只需将事件发送给 Broker 代理,Broker 同时通知所有的服务,当有某个服务需要暂停服务时,我们只需要取消订阅事件就可,解决了强耦合的问题。 2. 异步:一个客户端请求发送进来,系统 A 会调用系统 B、C、D 三个系统,同步请求的话,响应时间就是系统 A、B、C、D 的总和,也就是 800ms。如果使用 MQ,系统 A 发送数据到 MQ,然...
java日志
介绍SLF4J 是一个日志抽象层,它定义了一套统一的日志操作接口,本身不提供具体的日志输出实现,而是通过绑定不同的日志框架(如 Logback、Log4j 2、java.util.logging 等)来完成实际的日志输出。 作用: API 统一:提供一致的日志操作接口(Logger、info()、debug() 等),业务代码只需依赖 SLF4J API,无需关心底层实现。 解耦:业务代码与具体日志框架分离,切换日志框架时无需修改代码,仅需更换依赖的实现库。 兼容性:支持与几乎所有主流日志框架集成(Logback、Log4j 2、JUL 等)。 核心组件 API:定义日志操作接口 绑定器:连接 SLF4J API 与具体日志框架的适配层,实现接口到具体框架的转发 桥接器:将其他日志框架的 API 调用转换为 SLF4J API 调用 工作流程 业务代码通过 SLF4J API(LoggerFactory)获取 Logger 实例。 SLF4J 加载绑定器(Classpath 中存在的具体日志框架适配器)。 绑定器将 SLF4J API 调用转发到底层日志框架(如 Logba...
缓存于缓冲
缓存和缓冲缓存(cache):Cache 的核心作用是加快取用的速度。比如你一个很复杂的计算做完了,下次还要用结果,就把结果放手边一个好拿的地方存着,下次不用再算了。加快了数据取用的速度。缓冲(buffer):Buffer 的核心作用是用来缓冲,缓和冲击。比如你每秒要写 100 次硬盘,对系统冲击很大,浪费了大量时间在忙着处理开始写和结束写这两件事嘛。用个 buffer 暂存起来,变成每 10 秒写一次硬盘,对系统的冲击就很小,写入效率高了,日子过得爽了。极大缓和了冲击。 Cache缓存的核心价值后端存储(如 MySQL、硬盘文件)的读写速度通常较慢(毫秒级甚至更慢),而应用的访问需求往往是高频且低延迟的(微秒级) 缓存的本质:在内存中临时存储 “热点数据”(频繁访问的数据),让应用优先从缓存读取,跳过慢速的后端存储,从而: 提升响应速度(内存读写比磁盘快 1000 倍以上) 降低后端存储的访问压力(减少数据库查询,文件 IO 等) 缓存的工作流程 应用需要数据时,先查询缓存 缓存中有数据,直接返回数据 缓存中无数据,去后端存储查询数据,将查询到的数据写入缓存,返回数据给应用...