Zookeeper—整理记录
ZooKeeper 概览 ZooKeeper 是一个开源的分布式协调服务,它的设计目标是将那些复杂且容易出错的分布式一致性服务封装起来,构成一个高效可靠的原语集,并以一系列简单易用的接口提供给用户使用…
PostgreSQL—Explain查询计划
http://postgres.cn/docs/15/using-explain.html 在使用数据库时,经常会有这样的疑问:“我的表对应字段已经创建了索引,为什么这个SQL 语句执行还是这么慢?”…
PostgreSQL—自定义函数
PostgreSQL函数也称为PostgreSQL存储过程。 PostgreSQL函数或存储过程是存储在数据库服务器上并可以使用SQL界面调用的一组SQL和过程语句(声明,分配,循环,控制流程等)。 …
PostgreSQL—逻辑复制
测试采用 postgres:17beta2 版本的docker images 逻辑复制与流复制的区别 PostgreSQL 支持两种主要的复制模式:物理复制(也称为流复制)和逻辑复制。这两种复制模式有…
Java—绑定线程到指定CPU上(线程问题思考)
Java线程 在聊如何绑定之前,先铺垫一个相关的背景知识:Java线程的实现。 都知道 Thread 类的大部分方法都是 native 方法: 在 Java 中一个方法被声明为 native 方法,绝…
Minio—快速整理
MinIO 介绍 Minio 是个基于 Golang 编写的开源对象存储套件,虽然轻量,却拥有着不错的性能。 官方网站 https://min.io/product/enterpriseovervie…
LangChain+RAG—构建知识库(二)
后续的测试都是 LangChain + ollama + chroma 来进行RAG构建 Ollama安装 ollama 可以在本地快速启动并运行大型语言模型,支持很多种大模型,具体的可以在上面查看:…
LangChain+RAG—构建知识库(一)
大语言模型简介 模型简介 语言模型犹如一艘艘探索船,它们通过预测单词序列的概率,解码语言的奥秘。这些由人工神经网络构成的模型,经过海量文本数据的洗礼,不仅理解语言的本质,更能预测序列中的下一个单词。当…
PostgreSQL—监控
PostgreSQL的监控方案很多,功能强悍的包括zabbix、prometheus等,再搭配上grafana和echarts等可视化工具,逼格杠杠。还有针对PostgreSQL特定的监控如pg_to…
PostgreSQL—如何查找TOP SQL
数据版本为:postgres14 (不同版本之间的配置会有所变化) pg_stat_statements模块提供了一种跟踪服务器执行的所有 SQL 语句的计划和执行统计信息的方法。 该模块必须通过在p…
Kafka—整理记录
Kafka是最初由Linkedin公司开发,是一个分布式、支持分区的(partition)、多副本的(replica),基于zookeeper协调的分布式消息系统,它的最大的特性就是可以实时的处理大量…
Redis—Redisson客户端
Redis 是用单线程来处理多个客户端的访问,因此作为 Redis 的开发和运维人员需要了解 Redis 服务端和客户端的通信协议,以及主流编程语言的 Redis 客户端使用方法,同时还需要了解客户端…
Java—P6Spy数据库SQL记录
P6Spy是一个框架,它可以无缝地拦截和记录数据库活动,而无需更改现有应用程序的代码。一般我们使用的比较多的是使用p6spy打印我们最后执行的sql语句。常用的数据框架也会自带打印sql的功能,比如j…
Spring—WebFlux请求处理流程
在了解SpringMvc的请求流程源码之后,理解WebFlux就容易的多,毕竟WebFlux处理流程是模仿Servlet另起炉灶的。 MVC的具体参考以前的文章 http://www.enmalvi.…
一致性协议
常见的一致性协议 有二阶段提交(2PC)、三阶段提交(3PC)、Paxos、Raft等算法。 这是很多分布式集群相互通信的基础。 2PC 2PC即Two-Phase Commit,二阶段提交。广泛应用…
Java—动态线程池
Tomcat/Jetty 是目前比较流行的 Web 容器,两者接受请求之后都会转交给线程池处理,这样可以有效提高处理的能力与并发度。JDK 提高完整线程池实现,但是 Tomcat/Jetty 都没有直…
SpringBoot—jar包加密防止反编译
ClassFinal是一款java class文件安全加密工具,支持直接加密jar包或war包,无需修改任何项目代码,兼容spring-framework;可避免源码泄漏或字节码被反编译。 可以直接加…
Redis—集群方式
集群高可用常见的方式 Replication-Sentinel模式 Redis-Cluster模式 中心化代理模式(proxy模式) Replication-Sentinel模式 Redis sent…
Caffeine—缓存实战
之前分析了Caffeine的原理,缓存过期的内容 http://www.enmalvi.com/2023/10/03/caffeine/ 这里来简要讲讲如何快速使用,对于常见缓存类型而言,可以分为本地…
Caffeine—缓存学习
缓存(Cache)在代码世界中无处不在。从底层的CPU多级缓存,到客户端的页面缓存,处处都存在着缓存的身影。缓存从本质上来说,是一种空间换时间的手段,通过对数据进行一定的空间安排,使得下次进行数据访问…
SpringBoot—扩展接口
Spring的核心思想就是容器,当容器refresh的时候,外部看上去风平浪静,其实内部则是一片惊涛骇浪,汪洋一片。Springboot更是封装了Spring,遵循约定大于配置,加上自动装配的机制。很…
正则表达式 – 密码格式
示例 1种 只能由1种组成 只能由字母组成,1-9位 ^[a-zA-Z]{1,9}$ 只能由数字组成,1-9位 ^\d{1,9}$ 只能由特殊字符组成,1-9位 ^[^\da-zA-Z\s]{1,9}…
Java—使用SnakeYAML解析与序列化YAML
Springboot底层-snakeyaml的使用,就是用来操作YAML的 依赖 <dependencies> ... <dependency> <groupId>org.yaml&…
Java—定时任务—HashedWheelTimer时间轮
海量定时任务管理的问题 一个大型内容审核平时,在运营设定审核了内容的通过的时间,到了这个时间之后,相关内容自动审核 通过, 本是个小的需求,但是考虑到如果需要定时审核的东西很多,这样大量的定时任务带来…
Java—有向无环图(DAG)
在软件开发中会有会有定时任务的存在,简单的定时任务只需要在固定时间触发它的执行就可以了。 但是对于复杂的定时任务,可能是由多个任务组成一个任务组,它们之间存在依赖关系,一个任务执行的条件,必须是它的前…
JXLS—Excel模板框架
因为业务的需要,要解决报表样式的复杂度问题,每一个中国式报表的复杂度都是极其变态的,所以可以通过模版的方式来导出Excel样式,而不是通过代码来构造Excel的样式,这就是不采用原生的POI与Easy…
Disruptor—无锁队列
Disruptor 是什么 Disruptor 由 LMAX 开发,用于改进 Java 线程间通信,主要适用于对延迟敏感度高到极端的应用程序,在保持高吞吐量的同时确保非常高的响应时间。通常,此类服务旨…
Redis—注解接口限流
Redis 除了做缓存,还能干很多很多事情:分布式锁、限流、处理请求接口幂等性。 在项目中因为某个接口疯狂被请求导致线程阻塞,所以要对单个接口加上阻塞。 准备工作 添加POM依赖 <parent…
SpringBoot—数据库读写分离
在集群数据库里,数据库的读写分离也是常见的优化手段。 读写分离有很多种方式可以来实现,比如用sharding-jdbc等框架来实现,不过这里用最简单的方式。 方案使用了AbstractRoutingD…
Netty—初探与核心(未完)
Netty 是由 JBOSS 提供的一个 Java 开源通讯框架,用以快速开发高性能、高可靠性的网络 IO 程序。它底层很好地封装了 Socket,处理网络通信的一个开源通信框架。通俗说明,Netty…