自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(145)
  • 收藏
  • 关注

原创 RocketMQ阶段性学习总结

学习总结思维导图:https://docs.qq.com/mind/DSW5Pa25JbWhrd29v?

2025-09-14 07:13:22 141

原创 Redis学习阶段性总结

学习总结思维导图:https://docs.qq.com/mind/DSWxjdE5uV1FaU3BP?

2025-09-13 07:23:14 134

原创 RocketMQ之消息模型

RocketMQ客户端使用指南 本文介绍了RocketMQ客户端的基本使用流程和消息确认机制。主要内容包括: 客户端基本流程 生产者示例:初始化生产者、设置NameServer地址、发送消息 消费者示例:构建消费者、订阅主题、注册消息监听器 消息确认机制 生产者端三种发送方式: 单向发送:不关心结果,效率最高但安全性最低 同步发送:等待Broker返回SendResult,可处理失败情况 异步发送:通过回调处理结果,兼顾效率与可靠性 注意事项: 重发消息需带唯一标识保证幂等性 异步发送需注意超时设置和生产者

2025-09-12 08:39:33 924

原创 RocketMQ学习随笔(待补充)

1、分布式架构和高可用架构是共存的,都有各自合适的场景。如果性能优先,接受一定程度的不可用,可以选择分布式架构。如果要求高可用且支持牺牲一些性能就可以选择高可用架构。也就是AP和CP之间的抉择。2、NameServer在高可用方面做到了极致,就算仅有一个NameServer节点时,也可以运行。3、在dledger高可用架构下的broker有一个限制条件,broker的存活节点必须超过半数才能选举出master节点对外提供服务。例如原本3个节点,最后降为仅有一个时,就是不可用的。

2025-09-11 07:08:55 304

原创 Redis之底层数据结构

Redis底层数据结构解析:Redis的性能得益于其高效的数据结构设计。String类型根据值大小分为int、embstr、raw三种存储方式;Hash类型在Redis6.x使用ziplist+hashtable,Redis7.x改用更优的listpack+hashtable。ziplist通过连续内存存储提升寻址效率,但存在连锁更新问题;listpack作为其改进版,在保持优势的同时解决了这一问题。不同类型根据配置阈值自动选择最优存储结构,体现了Redis在内存使用和性能上的极致优化。

2025-09-10 03:46:11 1266

原创 Redis之使用事项、stack扩展功能、热点探测随笔

本文总结了Redis使用中的关键优化点,包括:1)key名设计应简洁且带业务前缀;2)避免bigkey,字符串不超过10KB,数据结构元素控制在500内;3)禁用危险命令,合理使用批量操作和连接池;4)设置内存淘汰策略和过期删除机制;5)调整Linux内核参数如swappiness和overcommit_memory;6)介绍了Redis Stack的扩展功能如JSON处理、搜索查询和布谷鸟过滤器;7)提出热点key探测方法,通过滑动窗口统计请求频率识别突发热点。这些优化措施可显著提升Redis性能与稳定性

2025-09-09 03:33:33 833

原创 Redis之分布式锁与缓存设计

本文介绍了分布式锁的实现方案及演进过程。首先分析了超卖问题和线程锁的局限性,指出单机线程锁无法解决分布式环境下的并发问题。随后详细讲解了基于Redis的三种分布式锁方案:基础版使用setnx命令实现简单互斥,但存在死锁风险;改进版通过设置过期时间避免死锁,但可能因业务执行超时而失效;最终版引入锁续命机制(watch dog)动态延长锁有效期。文章推荐使用Redisson框架,它已内置完善的分布式锁实现,包括自动续期功能,开发者无需重复造轮子。

2025-09-07 21:35:02 1262

原创 Redis之理解线程模型与数据安全

Redis是一个高性能的键值存储系统,支持多种数据结构,具备持久化能力,可作为缓存、数据库和向量搜索引擎。其单线程模型通过IO多路复用实现高并发处理,性能瓶颈主要在内存和网络。Redis提供多种保证指令原子性的方法,包括复合指令、事务、管道、Lua脚本和Redis Function(7.0+)。bigkey排查需谨慎执行以避免影响性能。数据安全性方面,Redis支持RDB快照和AOF日志两种持久化方式,各有优缺点:RDB适合备份和快速恢复,但可能丢失间隔期数据;AOF记录更完整但文件较大。实际应用中常结合使

2025-09-07 04:28:31 1028

原创 MySQL5.7学习脑图总结

摘要:该链接指向一个在线脑图工具页面,提供可视化思维导图制作功能。页面参数显示其为腾讯文档旗下的脑图服务,包含"no_promotion"和"subId"等跟踪标识。用户可通过该链接直接访问并创建结构化思维导图,支持多人协作编辑。链接末尾的"nlc=1"参数可能用于新窗口打开设置。(97字)

2025-09-06 07:09:18 156

原创 Redis之核心数据结构浅析

Redis基础命令与数据结构摘要 Redis支持多种数据结构,命令不区分大小写但key区分: String:单值操作(set/get)、多值(mset/mget)、分布式锁(setnx/expire)、计数器(incr) Hash:存储对象(hset/hgetall),适合购物车场景,节省空间但无法field级过期 List:双端队列(lpush/rpop),可用于消息队列 Set:去重集合(sadd/smembers),适合抽奖、点赞等场景 Zset:有序集合(zadd/zrange),带score排序,

2025-09-05 04:20:38 1046

原创 Redis之集群部署

Redis持久化与主从架构摘要 Redis提供RDB和AOF两种持久化方式:RDB以二进制快照形式定期保存数据,支持写时复制机制;AOF记录每条写命令,支持fsync刷盘和重写优化。4.0版本引入混合持久化,结合两者优势。主从架构通过PSYNC命令实现数据同步,支持全量复制和断点续传。此外,Redis管道可降低网络开销,Lua脚本提供原子操作能力,可作为事务的替代方案。合理配置持久化和主从策略可保障数据安全性和高可用性。

2025-09-05 01:23:27 583

原创 MySQL8.0之主从集群随笔

本文介绍了MySQL主从集群的搭建方法及注意事项。首先详细讲解了基于binlog的主从同步配置步骤,包括主库和从库的my.cnf配置、权限设置等关键环节。接着介绍了GTID同步集群的搭建方式,以及集群扩容时的数据迁移方法。最后重点阐述了半同步复制机制的原理和配置过程,通过安装semisync_master/slave模块实现更可靠的数据同步,解决异步复制可能丢失数据的问题。文章涵盖了从基础主从搭建到高级同步机制的全流程,为构建高可用MySQL集群提供了完整的技术方案。

2025-09-04 03:08:31 755

原创 MySQL8.0 新特性随笔

MySQL 8.0相比5.7版本有多项重要改进:新增索引跳跃扫描、降序索引和函数索引功能;取消了group by隐式排序;支持隐藏索引和DDL原子操作;优化了buffer pool自适应参数和死锁检查机制;将undo log移出系统表空间;新增窗口函数支持。这些改变提升了索引使用效率、SQL执行性能和系统稳定性,使MySQL能更好地利用硬件资源并简化开发运维工作。

2025-09-02 23:30:23 564

原创 MySQL之InnoDB底层原理与日志机制浅析

MySQL InnoDB日志机制解析 本文深入分析了MySQL InnoDB存储引擎的日志机制,重点介绍了redo log、binlog和undo log的工作原理及其协同机制。InnoDB通过WAL(预写日志)和顺序写技术实现高效事务处理,其中redo log保障数据持久性,undo log支持事务回滚,binlog用于数据备份和主从复制。文章详细阐述了update语句的执行流程,包括Buffer Pool操作、日志写入和事务提交过程,并对比了不同日志的落盘策略和参数配置。特别强调了redo log的循环

2025-09-02 02:25:58 1222

原创 MySQL之事务隔离级别与锁机制浅析

文章摘要: MySQL通过锁机制、事务机制和日志机制保证数据ACID特性。锁机制分为乐观锁和悲观锁,按粒度有表锁、行锁等,其中行锁支持间隙锁和临键锁解决幻读问题。事务机制通过隔离级别(RU/RC/RR/SERIALIZABLE)处理并发问题,MVCC机制结合undo log实现读写不冲突。InnoDB特有的事务特性由undo log(原子性)、锁/MVCC(隔离性)和redo log(持久性)共同保障,最终实现数据一致性。不同隔离级别在并发控制上各有侧重,RC解决脏读,RR通过间隙锁解决大部分幻读,SERI

2025-09-01 02:24:30 1379 2

原创 MySQL调优之Explain详解与索引优化实践

本文介绍了MySQL的Explain工具及其在SQL调优中的应用。主要内容包括: Explain工具概述:作为MySQL提供的调试工具,帮助开发者了解SQL执行路径,优化查询性能。 基本用法:在SELECT语句前加EXPLAIN关键字获取执行计划信息,展示id、select_type、table等关键指标。 扩展功能: 使用EXPLAIN EXTENDED可获取filtered列(估算查询连接范围) 执行SHOW WARNINGS可查看优化后的SQL语句 示例说明:通过实际表结构(t_user/t_addr

2025-08-31 06:19:01 1125

原创 MySQL底层数据结构与算法浅析

MySQL索引优化原理:从数据结构演进看查询性能提升 摘要: MySQL通过索引优化查询性能,其底层经历了多种数据结构的演进过程。全量顺序查找需要多次磁盘IO(如查询id=3需3次IO),效率低下。二叉树虽能通过二分查找将复杂度降至O(logN),但在极端情况下(如顺序插入1-8)会退化为链表,查询id=8仍需8次IO。红黑树通过自平衡机制解决了单边增长问题,但MySQL最终未采用这些方案。本文通过具体存储结构示例,展示了不同数据结构在数据检索时的性能差异,为理解索引优化原理和慢SQL调优提供了基础认知。后

2025-08-30 00:02:09 732

原创 Mysql架构浅析

本文概述了MySQL中SQL语句的执行流程。首先介绍了了解SQL执行过程的好处,包括编写高效SQL和排查问题。然后以SELECT查询为例,详细说明了SQL执行的各个阶段:客户端发起请求、连接器验证认证、查询缓存(5.8版本已移除)、分析器检查语法、优化器确定最佳执行路径、执行器真正执行SQL、存储引擎检索数据。最后补充了UPDATE语句的执行流程,重点说明了redo log和binlog的双写机制如何保证数据一致性和持久性。整个过程分为客户端、服务端和存储引擎三层,各组件协同工作完成SQL执行。

2025-08-29 02:04:02 1024

原创 查看日志的常用Linux命令(持续更新)

1.查询符合条件的行grep 关键字1 文件名.log | grep 关键字2 | grep 关键字3|grep.......如果要显示行号 可加参数-ngrep -n 关键字 文件名.log2.查询关键字,并且显示上下文less 文件名.log/关键字 #向前查找?关键字 #向后查找如果要跳转到指定的行,比如跳到36行,可使用:less +36 -j 1 文件名.log跳到36行,并且第36行在当前页面第1行显示。...

2022-04-06 15:55:23 1736

原创 java.net.UnknownHostException完美解决。

生产者会向Eureka注册,生产者如果部署在本机上,只需要部署以下参数即可:eureka: instance: instance-id: thisiswsgs01 # 设置服务描述消费者只需要通过 http://thisiswsgs01/user/1即可访问本次注册到的消费者。注意:如果只是以上配置,那么这个生产者只会被同在本机部署的消费者通过Eureka消费。因为这里会把thisiswsgs01解析成127.0.0.1.如果消费者部署在外网另一台机器,那么就会无法识别,就会出现找不.

2022-04-01 02:04:40 10036

原创 Jmeter入门快速上手(以demo驱动理解)

一、入门1. 一个最小的压测元素集合第一次启动Jmeter界面是英文,可以options => chooseLanguage => chinese(simple)操作切换至中文一个最简单的压测元素集合包括:一个测试计划一个线程组 (线程(用户))一个HTTP请求(取样器)一个汇总报告(监听器)2.简单入门demo计划对下面接口压测,总共调用12次,4秒内完成。也就是12 / 4 = 3 ,每秒并发3个请求.@RestController@RequestMappin

2022-03-30 19:02:50 1003

原创 压测工具Jmeter入门使用

一、创建一个基础的Web测试1. 测试内容模拟五个用户请求2次指定的http接口,并且重复2次。也就是总共请求有5 * 2 * 2 = 20 次要构建本次内容需要用到Jmeter的元素:线程组、HTTP请求、HTTP请求默认值和图形结果。2. 具体操作2.1. 创建测试计划单击左上角的新建计划按钮即可,同时可以设置测试计划的名称,注释。测试计划是一个完整测试元素的顶层容器。2.2. 创建线程组线程组可以用来设置要模拟的用户数量,用户应该多久发送一次请求,以及他们应该发送

2022-03-29 16:26:29 13402

原创 抓包基本命令

一、概述在一个A应用程序内数据有不同的格式如:Integer,String等。但是通过网络将数据传输给B应用程序,那么在到达B应用程序之前,数据都将统一解析成数据包,也就是二进制串在网络中传输。在B应用程序前布置一个“网”,在这个数据包到达B应用程序前拦截下来,得到这个二进制数据包的行为就称为抓包。二、抓包命令1.查看网卡命令(主要查看网卡的名称,后面要用到)ifconfig2.查看指定端口(应用程序)的网络数据流向情况tcpdump -i 网卡名 -X port 端口号3.命令提示符

2022-03-28 17:15:06 5650 1

原创 ASM库入门示例

概述读取一个类的信息可以使用反射,但是在效率上,ASM比反射更快。一、导入依赖<!-- https://mvnrepository.com/artifact/org.ow2.asm/asm --> <dependency> <groupId>org.ow2.asm</groupId> <artifactId>asm</artifactId> &

2022-03-15 18:40:44 1076

原创 测试框架jmockit入门(示例demo以及踩坑记录)

一、什么是jmockit?jmockit的优点?1.为了让程序更加可靠,健壮,以及保证在项目重构时前后的业务逻辑保持一致。通俗说就是尽量避免bug,从而需要编写单元测试。2.一个好的单元测试是指:在能测试覆盖它所有的逻辑代码下,同时实现解耦&美观。3.解耦的理想状态是:仅仅运行所编写的单元测试代码,就可以完成所有测试。(不依赖数据库,不依赖第三方微服务模块)。4.如果本项目测试的一个web接口调用了另一个微服务的业务接口,比如查数据库。那么为了完成本项目的单元测试正常运行,就还需要启

2022-03-14 18:59:46 3682

原创 初识kafka

kafka与传统的中间件区别:1.消息消费完不会删除,默认保存在磁盘一周。(kafka每个消费者会维护自己的一个消息列表偏移量)一、基本术语1.Broker消息中间件处理节点,一个kafka节点就是一个Broker,一个或多个Broker可以组成一个kafka集群。一个Broker包含多个topic。2.TopicKafka根据topic对消息进行归类,发布到Kafka集群的每条消息都需要指定一个topic。3.Product消息生产者,向Broker发送消息的客户端。4.Co.

2022-01-06 17:05:15 1018

原创 Redis视野打开篇

1.String格式一般存一个对象,是用这个对象的ID为键,将对象的所有属性格式化为json对象字符串,作为值,然后set(ID,json)进去.但是这种方式,在只需要修改这个对象中的其中一个属性时,就需要把json转为对象,改变值,然后再转为json对象,比较消耗时间。还有另一种方式mset();批量set。如:mset user:1:name xiaoh user:1:age 3mget user:1:name user:1:age另外,setnx可以用来做分布式锁。setnx k

2021-12-24 18:13:16 807

原创 git操作命令集合

概述本地git结构:工作区,暂存区,本地库1.将工作区修改的代码提交到暂存区git add2.将暂存区的代码提交到本地库git commit远程库和本地库的关系操作初始化本地仓库1.新建一个文件夹2.进入文件夹,git bash here3.执行命令git init4.将文件夹里新增的内容提交到暂存区git add 文件名5.暂存区提交到本地仓库git commit -m "本次提交的描述" 文件名查看工作区文件待提交状态git status1> 没

2021-12-15 14:26:11 756

原创 Java IO模型

BIO 阻塞IO一个连接,一个线程,且读写阻塞。服务端package com.xiaowuqin.bio;import java.io.IOException;import java.io.InputStream;import java.net.ServerSocket;import java.net.Socket;import java.util.concurrent.ExecutorService;import java.util.concurrent.Executors;p

2021-08-25 16:54:13 278

原创 Mybatis逆向工程

通过这个东西可以自动生成一个mapper.xm文件,dao层,pojo类.我们只需要提供一张表。开发中的顺风飞机。首先新建一个springboot项目,引入下面依赖:<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-jdbc</artifactId></dependency><.

2021-08-13 17:04:30 251

原创 elasticsearch集成xpack加密

概述2019年5月21日,Elastic官方发布消息: Elastic Stack 新版本6.8.0 和7.1.0的核心安全功能现免费提供。这意味着用户现在能够对网络流量进行加密、创建和管理用户、定义能够保护索引和集群级别访问权限的角色.本文章操作的前提:已经实现了elasticsearch集群。具体操作生成证书bin/elasticsearch-certutil ca生成p12密钥bin/elasticsearch-certutil cert --ca elastic-stack-

2021-08-12 15:50:16 696

原创 ElasticSearch搭建集群及调优配置和springboot集成

环境准备jdk版本[root@iz2zefc352jeey9szh60wlz ~]# java -versionopenjdk version "1.8.0_292"OpenJDK Runtime Environment (build 1.8.0_292-b10)OpenJDK 64-Bit Server VM (build 25.292-b10, mixed mode)Linux操作系统[root@iz2zefc352jeey9szh60wlz ~]# cat /etc/redhat-r

2021-08-12 11:29:45 1986

原创 设计模式(二)单例模式

定义采取一定的方法保证在整个软件系统中,对某个类只能存在一个对象实例,并且该类只提供一个取得该对象实例的方法。静态常量1.构造器私有化2.类的内部创建对象向外暴露一个getInstance方法package com.xiaowuqin.principle.singleton;//饿汉式(静态变量)public class Type1 { //内部创建 private final static Type1 type1 = new Type1(); //构造器

2021-08-09 11:42:20 175

原创 Nginx+RTMP HLS降低延迟参数

首先在obs处在流媒体服务器处rtmp { server { listen 1935; chunk_size 4096; application live { live on; } hls on; hls_path /tmp/hls; hls_fragment 1s; hls_playlist_length 3s; }}

2021-08-06 13:56:31 4668 2

原创 TCP/IP/UDP/RTP/RTCP协议

IP(指定目的地址和源地址)Version 版本号 四个字节IHL:IP Header Length IP头长度Total Length 总的长度 (总的长度减去IP头长度=数据长度)Identification Flags Fragment Offset 拆包、组包用(超过最大传输单元时)标识 允许/不运行拆包(一个保留字节) 每个包在原来中的偏移量Time To Live 缩写TTL 路由的跳数(一般设置成32)Protocol 协

2021-08-04 10:58:32 986

原创 libevent异步事件处理库

它其实是封装的epoll几个重要的函数event_base_new 对应epoll的create,还初始化所有的管理方面的如队列event_base_dispatch 对应epoll中的wait对应epoll中ctl的如下event_newevent_addevent_delevent_freeevconnlistener_new_bind 不用像epoll单独的绑定添加事件type

2021-08-03 17:08:05 496

原创 socket编程之Epoll

使用Epoll相较select的好处没有文件描述符的限制(MAX_FILES),select默认的1024.工作效率不会随着描述符的增加而下降(没有改变的描述符不会返回,也就是不会遍历)经过内核级优化的Epoll的事件触发模式Level Trigger 水平触发,如果数据没有一次性处理完毕,会再次发送Edge Trigger 边沿触发,不管数据有没有一次性处理完毕,都不会再次发送(效率最高,难度大)Epoll重要的APIint epoll_create();

2021-08-03 12:39:16 1019

原创 socket基础编程

俩个重要结构体struct sockaddr_in{ sa_family_t sin_family;//协议 uint16_t sin_port;//端口 struct in_addr sin_addr;//ip地址 char sin_zero[8]}struct in_addr{ in_addr_t s_addr;//整型}struct sockaddr{ sa_family_t sin_family;//ipv4等 char .

2021-08-02 17:02:37 430

原创 Linux进程到后台运行操作

概述Linux上跑的程序都是以后端执行的。即关闭终端,进程仍在运行。这才是服务器需要的。实现进程后台运行的方式1.fork 方式fork一个子进程,父进程退出,子进程成为孤儿进程,被init进程接管调用setid建立新的进程会话 ,因为原来父进程标记需要手动去除切换当前工作目录到根目录将标准输入,输出,出错重定向到 /dev/null代码#include <iostream>#include <fcntl.h>#include <unistd.h&g

2021-08-02 12:52:02 396

原创 Linux下的信号及捕获操作

什么是信号?比如当服务器与浏览器客户端建立起了一个socket连接,当浏览器主动断掉了这个连接,下次服务器给这个浏览器发消息的时候就会收到浏览器的一个已断开socket连接的一个信号,这个信号的意思一般是关闭服务器socket。如果不对这个信号处理,就会很不安全。信号的处理方式忽略 捕获 默认处理信号有哪些? man 7 signal # 查看信号几个重要的信号SIGPIPE 管道中止信号 当写入无人读的管道时产生该信号,默认终止信号必须要处理,比如

2021-08-02 11:35:32 607

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除