Postgre从入门到精通的实战指南

安装 sudo apt update # 对于Ubuntu/Debian sudo yum update # 对于CentOS/RHEL sudo apt install postgresql postgresql-contrib 配置与优化 修改配置文件 编辑postgresql.conf和pg_hba.conf以允许远程访问: listen_addresses = '*' host all all 0.0.0.0/0 md5 重启服务:sudo systemctl restart postgresql 修改密码 # sudo -u postgres psql ### ALTER USER postgres WITH PASSWORD 'postgre123'; ### \q 启动停止 方法 1: 使用 pg_ctl 命令 定位数据目录 确保知道 PostgreSQL 数据库的 data 目录路径,例如 /var/lib/postgresql/13/main。 启动数据库 在终端中运行以下命令: pg_ctl -D /path/to/data/directory start 验证服务状态 使用以下命令确认服务是否正常运行: netstat -aon | grep 5432 停止数据库 若需停止服务,运行: pg_ctl -D /path/to/data/directory stop 方法 2: 使用 service 命令 启动服务 如果 PostgreSQL 已注册为系统服务,可以直接运行以下命令: ...

2025-08-20 · FLY的狐狸

RocketMQ从入门到进阶

RocketMQ是阿里巴巴开源的分布式消息中间件,基于Java开发,专为高吞吐、高可靠的分布式系统设计。 核心特点 ①高吞吐量(支持千万级TPS); ②低延迟(毫秒级响应); ③支持多种消息模式(普通消息、顺序消息、事务消息等); ④完善的重试和死信机制; ⑤分布式架构,支持水平扩展; ⑥提供丰富的监控和运维工具。 消息队列优势 系统解耦:解决不同重要程度、不同能力级别系统之间依赖导致一死全死;大多数MQ支撑多语言客户端,可兼容多语言发开发; 削峰填谷:主要解决瞬时写压力大于应用服务能力导致消息丢失、系统奔溃等问题 异步通信:很多时候,用户不想也不需要立即处理消息。消息队列提供了异步处理机制,允许用户把一个消息放入队列,但并不立即处理它。想向队列中放入多少消息就放多少,然后在需要的时候再去处理它们。 提升性能:当存在一对多调用时,可以发一条消息给消息系统,让消息系统通知相关系统 蓄流压测:线上有些链路不好压测,可以通过堆积一定量消息再放开来压测 数据冗余:有些情况下,处理数据的过程会失败。除非数据被持久化,否则将造成丢失。MQ把数据进行持久化直到它们已经被完全处理,通过这一方式规避了数据丢失风险。许多MQ所采用的"插入-获取-删除"范式中,在把一个消息从队列中删除之前,需要你的处理系统明确的指出该消息已经被处理完毕,从而确保你的数据被安全的保存直到你使用完毕。 核心组件 **生产者(Producer):**Apache RocketMQ 中用于产生消息的运行实体,一般集成于业务调用链路的上游。生产者是轻量级匿名无身份的。 消息存储 主题(Topic):Apache RocketMQ 消息传输和存储的分组容器,主题内部由多个队列组成,消息的存储和水平扩展实际是通过主题内的队列实现的。 队列(MessageQueue):Apache RocketMQ 消息传输和存储的实际单元容器,类比于其他消息队列中的分区。 Apache RocketMQ 通过流式特性的无限队列结构来存储消息,消息在队列内具备顺序性存储特征。 消息(Message):Apache RocketMQ 的最小传输单元。消息具备不可变性,在初始化发送和完成存储后即不可变。 消息消费 消费者分组(ConsumerGroup):Apache RocketMQ 发布订阅模型中定义的独立的消费身份分组,用于统一管理底层运行的多个消费者(Consumer)。同一个消费组的多个消费者必须保持消费逻辑和配置一致,共同分担该消费组订阅的消息,实现消费能力的水平扩展。 消费者(Consumer):Apache RocketMQ 消费消息的运行实体,一般集成在业务调用链路的下游。消费者必须被指定到某一个消费组中。 订阅关系(Subscription): Apache RocketMQ 发布订阅模型中消息过滤、重试、消费进度的规则配置。订阅关系以消费组粒度进行管理,消费组通过定义订阅关系控制指定消费组下的消费者如何实现消息过滤、消费重试及消费进度恢复等。 Apache RocketMQ 的订阅关系除过滤表达式之外都是持久化的,即服务端重启或请求断开,订阅关系依然保留。 Broker:消息服务器,存储消息并处理收发请求,由多个节点组成集群,分为Master和Slave(Master负责读写,Slave同步数据并提供读服务)。 NameServer:轻量级注册中心,存储Broker的路由信息(如Topic与Broker的映射关系),支持动态扩容,无状态且节点间互不通信。 NameServer是RocketMQ的“路由中枢”,核心作用是存储和更新集群的路由信息,为生产者和消费者提供Broker的地址发现服务。 与Broker的交互机制: ①Broker启动时向所有NameServer注册自身信息(如IP、端口、Topic配置等); ②Broker定期(默认30秒)向NameServer发送心跳包,维持在线状态; ③NameServer在120秒内未收到Broker心跳,则将其从路由信息中移除,保证路由的实时性。 保证消息的可靠性 RocketMQ的消息可靠性保证贯穿于消息生产、Broker存储、消息消费全链路,通过多层次机制确保消息不丢失、不重复,具体如下: 一、生产端:确保消息成功发送到Broker 生产者(Producer)发送消息时,通过“重试机制+确认机制”避免因网络波动、Broker临时故障导致的消息丢失。 发送确认机制 RocketMQ支持三种发送方式,均通过Broker的响应确认消息是否成功送达: 同步发送:Producer发送消息后,等待Broker返回“发送成功”确认(包含消息ID和存储位置),才视为发送完成;若超时未收到确认,触发重试。 异步发送:Producer发送消息后立即返回,通过回调函数接收Broker的确认结果;若失败,在回调中处理重试。 单向发送:仅发送消息不等待确认(适用于日志等非核心场景),但核心业务一般不使用,避免丢失。 失败重试机制 当发送失败(如网络超时、Broker繁忙)时,Producer会自动重试,可通过参数配置: retryTimesWhenSendFailed:同步发送失败重试次数(默认2次)。 retryTimesWhenSendAsyncFailed:异步发送失败重试次数(默认2次)。 重试时会选择其他Broker节点(通过NameServer获取路由信息),避免单节点故障影响。 二、Broker端:确保消息持久化与集群可靠性 Broker作为消息存储核心,通过“持久化存储+主从复制+故障转移”保证消息不丢失。 ...

2025-07-21 · FLY的狐狸

Kafka基础架构介绍

Kafka基础架构介绍 Kafka 是一个分布式、高吞吐量、低延迟的流处理平台,核心用于消息传递、日志收集、实时数据管道等场景。其架构设计和底层原理围绕“高吞吐”“高可用”“持久化”三大目标展开,以下从核心架构和底层机制两方面解析。 主要应用场景: ①日志收集(如ELK架构中收集应用日志); ②消息系统(解耦生产者和消费者); ③流式数据处理(与Spark Streaming、Flink等结合); ④事件溯源(记录系统状态变化的事件序列); ⑤数据同步(跨系统数据实时同步)。 一、Kafka 核心架构 Kafka 的架构由四大核心组件和关键概念构成,整体呈现分布式集群形态: 1. 核心组件 Producer(生产者):向 Kafka 集群发送消息的客户端(如应用程序、日志采集器等)。 Consumer(消费者):从 Kafka 集群读取消息的客户端(如数据分析程序、下游服务等)。 Broker( broker 节点):Kafka 服务器实例,负责存储消息、处理生产/消费请求,多个 broker 组成集群。 ZooKeeper(协调服务):早期版本(2.8 前)用于管理集群元数据(如 broker 注册、分区 leader 选举、配置存储等);新版本(2.8+)引入 Self-Managed Metadata Quorum,逐步弱化对 ZooKeeper 的依赖。 2. 关键概念 Topic(主题):消息的逻辑分类,生产者按 Topic 发送消息,消费者按 Topic 订阅消息(类似“消息队列名称”)。 Partition(分区):每个 Topic 被拆分为多个分区(Partition),分区是 Kafka 并行处理的基本单位。 每个分区是有序、不可变的消息日志(仅支持追加写入),消息按发送顺序编号(Offset,从 0 开始递增)。 分区分布在不同 broker 上,实现数据分片存储和并行读写(吞吐量随分区数增加而提升)。 Replica(副本):为保证数据高可用,每个分区可配置多个副本(Replica),其中一个为Leader 副本(处理读写请求),其余为Follower 副本(同步 Leader 数据,Leader 故障时替代)。 三者是描述Partition副本状态的术语: AR(Assigned Replicas):Partition的所有副本集合(包括Leader和Follower)。 ISR(In-Sync Replicas,同步副本集):与Leader副本保持同步的副本集合(包括Leader本身),满足两个条件:①与Leader保持网络连接;②同步滞后不超过replica.lag.time.max.ms(默认30秒)。 若 Follower 长时间未同步,会被踢出 ISR,仅 ISR 中的副本可参与 Leader 选举。 ...

2025-07-21 · FLY的狐狸

Mysql从入门到精通的实战指南

MySQL是一个开放源代码的数据库管理系统(DBMS),是由MySQL AB公司开发、发布并支持的。MySQL是一个跨平台的开源关系型数据库管理系统,广泛地应用在Internet上的中小型网站开发中。 概念 SQL语句分类 数据定义语言DDL(Data Ddefinition Language):CREATE,DROP,ALTER 主要为以上操作 即对逻辑结构等有操作的,其中包括表结构,视图和索引。 数据查询语言DQL(Data Query Language):SELECT 这个较为好理解 即查询操作,以select关键字。各种简单查询,连接查询等 都属于DQL。 数据操纵语言DML(Data Manipulation Language):INSERT,UPDATE,DELETE 主要为以上操作 即对数据进行操作的,对应上面所说的查询操作 DQL与DML共同构建了多数初级程序员常用的增删改查操作。而查询是较为特殊的一种 被划分到DQL中。 数据控制功能DCL(Data Control Language):GRANT,REVOKE,COMMIT,ROLLBACK 主要为以上操作 即对数据库安全性完整性等有操作的,可以简单的理解为权限控制等。 数据库三大范式是什么 第一范式:每个列都不可以再拆分。 第二范式:在第一范式的基础上,非主键列完全依赖于主键,而不能是依赖于主键的一部分。 第三范式:在第二范式的基础上,非主键列只依赖于主键,不依赖于其他非主键。 在设计数据库结构的时候,要尽量遵守三范式,如果不遵守,必须有足够的理由。比如性能。事实上我们经常会为了性能而妥协数据库的设计。 一 存储引擎 1.1 存储引擎 MySQL 8.0支持的存储引擎有InnoDB、MyISAM、Memory、Merge、Archive、Federated、CSV、BLACKHOLE等。 MySQL常用存储引擎包括: InnoDB(默认):支持事务、外键、行级锁,适合高并发场景。 MyISAM:不支持事务和外键,表级锁,读写性能较高(适合读多写少)。 Memory:数据存储在内存中,速度极快,适合临时表。 Archive:只支持INSERT和SELECT,压缩存储,适合历史数据归档。 核心区别: 特性 InnoDB MyISAM 事务支持 ✅ ❌ 外键 ✅ ❌ 锁机制 行级锁 表级锁 索引与数据 聚簇索引(索引和数据存储在一起) 非聚簇索引 崩溃恢复 支持 不支持 InnoDB与MyISAM对比: InnoDB主键索引直接存储数据,MyISAM索引只存储数据地址。 InnoDB的二级索引叶子节点存储主键值,MyISAM存储数据地址。 MyISAM:不支持事务和外键,支持表级锁,查询速度快,适合读多写少场景(如日志表),崩溃后恢复困难。 InnoDB:支持事务(ACID)、外键和行级锁,有崩溃恢复能力(依赖redo日志),适合写操作频繁的场景(如订单表),性能略低于MyISAM但安全性更高。 1.2 日志文件 常用的日志文件包括错误日志、二进制日志、查询日志、慢查询日志和InnoDB引擎在线Redo日志等。 ...

2025-07-21 · FLY的狐狸

Redis核心用法:从数据结构到分布式锁,小白也能轻松入门

一、Redis简介 Redis(全称为Remote Dictionary Server)是一个开源的高性能键值对存储系统,具有快速、灵活和可扩展的特性。它是一个基于内存的数据结构存储系统,可以用作数据库、缓存和消息代理。 Redis 的一些主要特点和用途: 高性能:Redis 数据存储在内存中,因此能够提供极快的读写操作。它采用单线程模型和异步 I/O,避免了多线程的竞争和阻塞,从而达到了非常高的性能。 数据结构多样:Redis 支持多种数据结构,包括字符串(String)、哈希(Hash)、列表(List)、集合(Set)和有序集合(Sorted Set)。这些数据结构提供了丰富的操作命令,使得开发者可以方便地处理各种数据需求。 持久化支持:Redis 提供了两种持久化方式,即快照(Snapshotting)和日志追加(Append-only file,AOF)。快照方式将 Redis 内存数据以二进制格式写入磁盘,而 AOF 则通过追加记录 Redis 的操作命令来实现持久化。 发布/订阅:Redis 支持发布/订阅模式,可以用作消息代理。发布者将消息发送到指定的频道,订阅者则可以接收和处理这些消息。这种模式在构建实时通信、事件驱动系统和消息队列等场景中非常有用。 分布式缓存:Redis可以通过主从复制和分片来实现数据的分布式存储和高可用性。主从复制可以将数据复制到多个从节点,实现读写分离和数据备份。而分片则可以将数据分布在多个Redis节点上,实现横向扩展和负载均衡。 事务支持:Redis 支持事务,开发者可以将多个操作组合成一个原子性的操作序列,保证这些操作要么全部执行成功,要么全部不执行。 功能丰富:Redis不仅仅是一个简单的缓存,它还提供了许多其他功能,如事务支持、Lua脚本执行、定时任务、原子操作等。这使得开发者可以在Redis中实现更复杂的应用逻辑。 Redis 是一个功能丰富的存储系统,适用于多种场景,包括缓存、会话存储、排行榜、实时分析等。它有广泛的应用,并且拥有活跃的社区支持。 二、Redis五种数据结构 Redis 可以存储键和常用的五种不同类型的值之间的映射。键的类型只能为字符串,值支持五种数据类型:字符串、列表、集合、散列表、有序集合。 2.1 字符串(Strings) 2.1.1 基础介绍 Redis 里的字符串是动态字符串,会根据实际情况动态调整。类似于 Go 里面的切片-slice,如果长度不够则自动扩容。 至于如何扩容,方法大致如下:当 length 小于 1M 的时候,扩容规则将目前的字符串翻倍;如果 length 大于 1M 的话,则每次只会扩容 1M,直到达到 512M。 新增、修改操作 set key value 查询操作 get key 2.1.2 字符串底层数据结构 String是用SDS(简单动态字符串)来实现的。String类型一共有三种存储方式。 长度小于等于44字符时采用embstr 长度大于44字符时采用raw 当值为整数时采用int 2.1.3 SDS结构 ...

2025-07-15 · FLY的狐狸