- 博客(131)
- 资源 (3)
- 收藏
- 关注
原创 2、RocketMQ的消息模型
在消息需要重试时,会先移动到对应的重试Topic中。这样,这些重试的消息有了自己单独的队列,就不会影响到Topic下的其他消息了。由于RocketMQ与消费者端有失败重试机制,所以,只要消息成功发送到RocketMQ了,那么可以认为Branch2.1,Branch2.2,Branch2.3这几个分支步骤,是可以保证最终的数据一致性的。但是,这里还是会造成一种分裂,消息最终是由Consumer来处理,但是消息却是由Broker推送过来的,也就是说,Consumer无法确定自己将要处理的是哪些消息。
2026-03-26 13:24:30
418
原创 1、RocketMQ核心概念详解
MQ:MessageQueue,消息队列。是使用非常广泛的服务中间件。MQ的组成可以分两个部分来看:1、Message(消息):消息是在不同进程之间传递的数据。这些进程可以部署在同一台机器上,也可以分布在不同机器上。2、Queue(队列):队列原意是指一种具有FIFO(先进先出)特性的数据结构,是用来缓存数据的。对于消息中间件产品来说,能不能保证FIFO特性,尚值得考量。但是,所有消息队列都需要具备这两点能力:a、存储消息,b、让消息排队的能力。广义上来说,只要能够实现消息跨进程传输以及。
2026-03-20 20:20:31
438
原创 6、认识和使用Redis Stack
比如在分布式场景下做用户登录功能,就可以将用户信息以JSON字符串的形式保存到Redis中,来代替单体应用中的Session,从而实现统一的登录状态管理。桶Busket中并不实际保存数据本身,而是保存数据的指纹(可以认为是压缩后的数据,实际上是数据对象的几个低位数据)。这样就极大的减少了数据迁移带来的麻烦。通常使用的 keys * 这样的指令,在生产环境一般都是直接禁用的,因为这样会产生严重的线程阻塞,影响其他的读写操作。所以,在布隆过滤器的初始化过程中,通常只需要指定过滤器的容量和误判率,就足够了。
2026-03-16 14:09:56
494
原创 5、Redis的设计与性能优化
由于缓存层承载着大量请求, 有效地保护了存储层, 但是如果缓存层由于某些原因不能提供服务(比如超大并发过来,缓存层支撑不住,或者由于缓存设计不好,类似大量请求访问bigkey,导致缓存能支撑的并发急剧下降), 于是大量请求都会打到存储层, 存储层的调用量会暴增, 造成存储层也会级联宕机的情况。如果系统启动完马上就会有很多的请求过来,那么可以给redis连接池做预热,比如快速的创建一些redis连接,执行简单命令,类似ping(),快速的将连接池里的空闲连接提升到minIdle的数量。
2026-03-13 13:19:27
411
原创 4、Redis的数据安全分析
Redis的所有数据是保存在内存当中的,得益于内存高效的读写性能,Redis的性能是非常强悍的。但是,内存的缺点是断电即丢失,所以,在实际项目中,Redis一旦需要保存一些重要的数据,就不可能完全使用内存保存数据。因此,在真实项目中要使用Redis,一定需要针对应用场景,对Redis的性能进行估算,从而在数据安全性与读写性能之间找到一个平衡点。Redis提供了压测脚本redis-benchmark,可以对Redis进行快速的基准测试。# 20个线程,100W个请求,测试redis的set指令(写数据)
2026-03-05 21:27:08
403
原创 3、深入理解Redis的线程模型
用redis-cli --help指令可以看到有 --pipelua是一种小巧的脚本语言,他拥有很多高级语言的特性。比如参数类型、作用域、函数等。lua的语法非常简单,熟悉Java后基本上可以零门槛上手lua。这个网站可以直接在线调试lua语法,简单轻松无压力:https://wiki.luatos.com/注:Redis 7.x版本支持的lua语言是5.1版本。而这个网站支持的是5.3版本。lua语言最大的特点是他的线程模型是单线程的模式。这使得lua天生就非常适合一些单线程模型的中间件。
2026-03-04 13:45:04
404
原创 1、基于Linux的Redis的安装
当主观下线的节点是主节点时,此时该哨兵3节点会通过指令sentinel is-masterdown-by-addr寻求其它哨兵节点对主节点的判断,当超过quorum(选举)个数,此时哨兵节点则认为该主节点确实有问题,这样就客观下线了,⼤部分哨兵节点都同意下线操作,也就说是客观下线。数据的复制是单向的,只能由主节点到从节点。c)负载均衡:在主从复制的基础上,配合读写分离,可以由主节点提供写服务,由从节点提供读服务(即写Redis数据时应⽤连接主节点,读Redis数据时应⽤连接从节点),分担服务器负载;
2026-02-11 17:52:19
609
原创 17、MySQL InnoDB ReplicaSet
MySQL Innodb Cluster = MySQL Shell + MySQL Router + MySQL Group Replication(MGR),全程由 MySQL Shell 来管理操作 MGR 的聚合套件。MySQL 8.0.19 发布后,这种组合延伸到 MySQL Replication(主从复制),也就是 MySQL Shell + MySQL Router + MySQL Replication。
2026-02-08 20:45:34
674
原创 16、MySQL InnoDB Cluster
InnoDB Cluster是My SQL官方实现高可用+读写分离的架构方案,其中包含以下组件My sQLGroup Replication,简称MGR,是MySQL的主从同步高可用方案,包括数据同步及角色选举·Mysql Shell是InnoDB Cluster的管理工具,用来创建和管理集群MysqIRouter是业务流量入口,支持对MGR的主从角色判断,可以配置不同的端口分别对外提供读写服务,实现读写分离。
2026-02-05 23:32:30
622
原创 15、基于MySQL的组复制
由于传统异步复制的缺陷,可能会导致主从数据不一致的问题,在主节点异常宕机时从节点可能造成数据丢失。基于这个缺陷,Mysql5.7.17推出了一个高可用与高扩展的解决方案Mysql Group Replication(简称MGR)将原有的gtid复制功能进行了增强,支持单主模式和多主模式。组复制在数据库层面上做到了只要集群中大多数主机可用,则服务可用,也就是说3台服务器的集群,允许其中1台宕机。提供了分布式状态机复制,服务器之间具有很强的协调性。当服务器属于同一组时,它们会自动进行协调。
2026-02-04 11:20:40
675
原创 14、MySQL基于GTID的数据同步
恢复主从复制的步骤复杂不论是首次开启同步时需要找位点和设置位点,还是恢复主从复制时,设置位点和忽略错误,。所以 MySQL 5.6 版本引入了 GTID,彻底解决了这个困难。GTID是一个基于原始mysql服务器生成的一个已经被成功执行的全局事务ID,它由服务器ID以及事务ID组合而成。这个全局事务ID不仅仅在原始服务器器上唯一,在所有存在主从关系 的mysql服务器上也是唯一的。正是因为这样一个特性使得mysql的主从复制变得更加简单,以及数据库一致性更可靠。
2026-02-01 20:32:42
692
原创 13、MySQL半同步复制示例
如果在运行时启用副本上的半同步复制,您还必须启动复制I/O(接收端)线程(如果已经运行,则先停止它),以使副本连接到源端并注册为半同步副本。测试:当从节点响应超时时,主节点会将同步机制退化为异步复制。从节点恢复后,同步机制是否会恢复为半同步复制。
2026-02-01 16:53:41
77
原创 12、MySQL异步复制的示例
includedir /etc/mysql/conf.d/: 这告诉MySQL服务器从/etc/mysql/conf.d/目录中包含其他配置文件。pid-file: 这是MySQL服务器的进程ID文件的位置。source_log_pos:指定从数据库从哪个位置开始复制数据,通过查看主数据的状态,获取Position参数;source_log_file:指定从数据库要复制数据的日志文件,通过查看主数据的状态,获取File参数;socket: 这是MySQL服务器用于本地通信的Unix套接字文件的位置。
2026-01-30 15:20:01
610
原创 11、MySQL主从复制的基本概念
MySQL Replication是官方提供的主从同步方案,也是用的最广的同步方案。Replication(复制)使来自一个MySQL数据库服务器(称为源(Source))的数据能够复制到一个或多个MySQL服务器(称为副本(Replica))。默认情况下,复制是异步的;副本不需要永久连接即可从源接收更新。根据配置,用户可以复制所有数据库、指定数据库,甚至某个数据库中的指定表。说明:旧版本的 MySQL复制将源(Source)称为主(Master),将副本(Replica)称为从(Slave)
2026-01-29 19:57:35
656
原创 9、MySQL优化策略汇总
从上图可看出,SQL及索引的优化效果是最好的,而且成本最低,所以工作中我们要在这块花更多时间。假设服务器配置为:CPU:32核内存:64G可以从如下参数着手进行优化连接的创建和销毁都需要系统资源,比如内存、文件句柄,业务说的支持多少并发,指的是每秒请求数,也就是QPS。一个连接最少占用内存是256K,最大是64M,如果一个连接的请求数据超过64MB(比如排序),就会申请临时空间,放到硬盘上。允许用户连接的最大数量,剩余连接数用作DBA管理。MySQL能够暂存的连接数量。
2026-01-23 17:46:35
727
原创 8、InnoDB底层原理与日志机制
注意:如果要恢复大量数据,比如程序员经常说的删库跑路的话题,假设我们把数据库所有数据都删除了要怎么恢复了,如果数据库之前没有备份,所有的binlog日志都在的话,就从binlog第一个文件开始逐个恢复每个binlog文件里的数据,这种一般不太可能,因为binlog日志比较大,早期的binlog文件会定期删除的,所以一般不可能用binlog文件恢复整个数据库的。执行完成后,执行结果会被存入查询缓存中。你可以看到,如果查询命中缓存,MySQL 不需要执行后面的复杂操作,就可以直接返回结果,这个效率会很高。
2026-01-21 13:36:22
589
原创 7、MVCC(多版本并发控制)
MVCC机制的实现就是通过read-view机制与undo版本链比对机制,使得不同的事务会根据数据版本链对比规则读取同一条数据在版本链上的不同版本数据。
2025-12-31 14:31:57
917
原创 6、MySQL事务与锁机制
在很多场景下,数据库需要并发执行多个事务,多个事务可能会并发的对相同的一批数据进行增删改查操作,这就可能导致脏写、脏读、不可重复读、幻读这些问题。这些问题的本质都是数据库的多事务并发问题,为了解决多事务并发问题,数据库设计了事务隔离机制、锁机制、MVCC多版本并发控制隔离机制,用一整套机制来解决多事务并发问题。理解数据库内部的执行原理可以更好地理解事务与锁机制。
2025-12-30 15:56:55
753
原创 5、MySQL优化实践(二)
在决定哪个表做驱动表的时候,应该是两个表按照各自的条件过滤,过滤完成之后,计算参与 join 的各个字段的总数据量,数据量小的那个表,就是“小表”,应该作为驱动表。
2025-12-26 21:00:30
926
原创 4、MySQL优化实践(一)
1、MySQL支持两种方式的排序filesort和index,Using index是指MySQL扫描索引本身完成排序。index效率高,filesort效率低。2、order by满足两种情况会使用Using index。1) order by语句使用索引最左前列。2) 使用where子句与order by子句条件列组合满足索引最左前列。3、尽量在索引列上完成排序,遵循索引建立(索引创建的顺序)时的最左前缀法则。4、如果order by的条件不在索引列上,就会产生Using filesort。
2025-12-24 19:52:01
495
原创 2、数据库的索引与底层数据结构
常见的数据结构:二叉树、红黑树、Hash表、B-TreeMySQL数据库作为一种结构化的数据库,存取操作的瓶颈在磁盘 I/O,因此,基于B-Tree改造的B+ Tree是最适合的数据结构。
2025-12-18 20:33:19
482
原创 1、全面理解MySQL的架构
Navicat、JDBC连接工具都是客户端,用于连接和发送SQL请求存储引擎层的则是以插件的形式存在的,MySQL 支持多种存储引擎在最常用的存储引擎是 InnoDB,InnoDB支持事务、行级锁定和外键约束。这是MySQL5.5.5版本及之后的默认引擎。其他的引擎还有MyISAM、Memory等。
2025-12-17 14:00:09
753
原创 三、构建一个Agent
上一章节提到的版本冲突问题实际是在构建的过程中发现并解决,为了帮助大家避坑,所以在上一篇就写出来。本章节使用的是DataWhale提供的一个完整可用的代码仓来进行的一个实验。末尾有代码仓的地址。
2025-07-27 21:35:26
242
原创 二、CUDA、Pytorch与依赖的工具包
CUDA = Compute Unified Device Architecture(统一计算架构)。的平台 + 编程接口。CUDA可以使你的程序(比如矩阵、神经网络),这比CPU能快几十甚至上百倍。构建神经网络、加载模型和数据、启动训练和推理、支持 CPU 和 GPU,但Pytorch本身默认使用的CPU,想要Pytorch使用GPU,得安装好,这样PyTorch 才能找得到 GPU。
2025-07-27 13:07:18
671
原创 一、Python环境、Jupyter、Pycharm与Conda
由于RAG项目中所需要的Python版本必须高于3.8,经过筛选,最终选择了3.10.11这个版本安装过程略过,但对于几个基础的命令作个笔记记录找到python启动器的位置py -0 这个命令可以在有多个版本的Python的情况下,查看Python启动器默认执行的是哪个版本(带 * 标记的这个就是默认版本),多个版本的情况下,如果想改变Python启动器的默认版本,有两种方式:1、设置环境变量2、改配置置文件两者并不是同步的,因为Python启动器用的python版本并不依赖于PATH环境变量。
2025-07-24 17:14:01
1393
原创 Java8新特性(三):Stream流与Stream API
Stream流简介Stream的操作步骤1、创建Stream流2、中间流水线操作3、终止操作,产生需要的结果源数据注意:Stream流和最终产生的结果不影响创建Stream的代码示例List<String> list = Arrays.asList("Sarah", "Terry", "Selina", "Tom");// 创建Stream@Testpublic void test01(){ // 1、通过Collection提供的stream(.
2021-10-20 18:22:37
381
原创 Java8新特性(一):初识Lamda表达式
Java8相较于之前的版本有哪些优点:1、运行速度更快(内存管理和垃圾回收机制发生了改变)2、代码更简洁(因为使用了Lamda表达式)3、强大的Stream API4、便于并行5、使用Optional可减少空指针异常最为核心的的两大特性:Lamda表达式和Stream API如何理解Lamda表达式?Lambda将功能实现(即模型中的 {代码块})作为参数进行传递。Lambda式子中,"->“前面的是需要实现的抽象方法的形参,没有形参就”()".
2021-10-16 17:38:27
893
1
原创 JNI Demo示例(Windows版)
环境准备:1、安装JDK,并配置好环境变量(使用Java命令)2、安装minGW,并配置好环境变量(使用gcc和g++命令)3、Java开发IDE,如IDEA步骤:一、创建一个Java工程,写一个java文件 ,注意packge命名package com.xp;public class Hello { public native void sayHello(); static { System.loadLibrary("Hello");//
2021-07-26 15:51:35
651
原创 MySQL教程-练习篇
建表语句下载:https://pan.baidu.com/s/1LvmDPuv87ws-0lt3ypXbeQ提取码:lusu也可以微信扫码下载:所用到的表如下:mysql> desc departments;+-----------------+------------+------+-----+---------+----------------+| Field | Type | Null | Key | Default | Extra
2021-02-18 15:08:51
427
原创 程序员的家常菜谱
1、鸡鸭类板栗烧鸡腿原材料:配料及调料口感:步骤:注意事项:2、猪牛肉类肉类板栗烧鸡2、鱼类3、素菜4、红烧鱼3、青椒香干炒肉4、干锅花菜5、手撕包菜6、
2021-01-19 18:13:07
1847
2
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅