前言 之前工作中学习应用 Redis,只停留再 API 应用层,知其然,不知其所然,近在用 Redis 做大量的测试应用,发现关注与性能,后面激发自己想了解为啥 Redis 性能这么快,字符串结构是怎样,基于此,在网上找了下资料和看了下 <Redis5 设计与源码分析 >,有所感,记录下 Redis 用途 Redis 是目前最流行的键值对( key-value)数据库,以出色的性能著称,官方提供的数据是可以支持 100 000 以上的 +QPS。Redis 具有高性能的主要原因如下。 1 ) Redis 是基于内存的存储数据库,绝大部分的命令处理只是纯粹的内存操作,内存的读写速度非常快。 2) Redis 是单进程线程的服务(实际上一个正在运行的 Redis Server 肯定不止一个线程,但只有一个线程来处理网络请求),避免了不必要的上下文切换,同时不存在加锁/释放锁等同步操作。 3 ) Redis 使用多路 I/O 复用模型(select、poll、epoll),可以高效处理大量并发连接。 4 ) Redis 中的数据结构是专门设计的,增、删、改、查等操作相对简单。 简....

Alibaba Nacos注册中心源码剖析
nacos 简介 Nacos /nɑ:kəʊs/ 是 Dynamic Naming and Configuration Service 的首字母简称,一个更易于构建云原生应用的动态服务发现、配置管理和服务管理平台。 Nacos 致力于帮助您发现、配置和管理微服务。Nacos 提供了一组简单易用的特性集,帮助您快速实现动态服务发现、服务配置、服务元数据及流量管理。 Nacos 帮助您更敏捷和容易地构建、交付和管理微服务平台。 Nacos 是构建以“服务”为中心的现代应用架构 (例如微服务范式、云原生范式) 的服务基础设施。 下载源码(1.4) 从 GitHub 下载 nacos 的 1.4 版本的源代码 流程架构图 架构原理 1、微服务系统在启动时将自己注册到服务注册中心,同时外发布 Http 接口供其它系统调用(一般都是基于 Spring MVC) 2、服务消费者基于 Feign 调用服务提供者对外发布的接口,先对调用的本地接口加上注解 @FeignClient,Feign 会针对加了该注解的接口生成动态代理,服务消费者针对 Feign 生成的动态代理去调用方法时,会在底层生成 Htt....

百万数量级别导入导出,看我这样做
背景 相信在业务当中,会有许多数据导入导出,一般涉及到百万数据级别数据导入导出,如果没有一个优良的性能架构,很容易产生 OOM,造成服务器崩盘,所以写下这篇文章,简单写下核心伪代码,起到抛砖引玉 功能设计 技术选型: springboot+mysql+ 线程池 +mybatisplus+aop+juc tools + easyExcel 在于数据导出涉及 IO 操作,不采用线程池的话,串行耗时较长,同时数据量较大,不对数据进行分页处理,可能会产生内存溢出。 线程池线程配置 **涉及到 io 密集和 CPU 循环,这里主要将线程数据设置为 2*n+1,这种配置是理想情况下,具体的线上业务,需要看业务,有兴趣可以看看京东写的一篇博客: **京东讲解 cpu 核心和线程数计算 static { CPU = Runtime.getRuntime().availableProcessors(); N_THREAD = 2 * CPU + 1; EXECUTOR_SERVICE = Executors.newFixedThreadPool(N_THREAD); } 数据生成 建表语句 CREATE....

随记springboot个ldap 实现CRUD
背景 这几天接到公司的一个需求,需要研发一个多租户系统,其中涉及到操作系统角色管理模块,用户在租户平台创建自定义角色(系统初始化的时候会自动创建一些角色,hdfs 组件管理员,admin,yarn 等等),当用户在平台创建角色的时候会同步到 ldap,ldap 接入 Linux 之后被其他用户关联了,就会在 Linux 拥有这些权限,基于此,所以学习下 ldap 接入 SpringBoot 用法,简单写个 CRUD 安装 LDAP 还不知道怎么安装和了解 LDAP 的可用看看https://www.xiaohugg.top/articles/2023/07/11/1689057905882.html 开发 1.spring yam 文件配置 spring: ldap: urls: ldap://xxxxx:389 base: dc=xxx,dc=com username: cn=example,dc=xxx,dc=xx password: xxxxx 2.pom 依赖 <dependency> <groupId>org.springframework....

什么,JVM竟然带颜色??
背景 最近因为线上出现了一个 jvm 的问题,最终原因是反射过多创建了类对象,而设置的 MetaSpace 过下,导致溢出了,最终虽然结合网上和自己的经验,一段骚操作解决了,不过也萌发了我对 jvm 的理解,虽然在网上听了太多的垃圾回收算法/垃圾回收器,但是回收算法具体是怎么样实现的,刚好最近有幸偶然看了下 JVM 深入理解虚拟机(三)这版书和结合网上技术大牛的讲解,说到了三色标记,基于此写篇博客记录下 三色标记 天空一声巨响,三色标记就闪亮登场,jvm 说,我需要点颜色,give me some color see see ,于是三色标记就出来(开个玩笑,三色标记不是具体的颜色,而是一个形象的抽象,emmm) 三色标记简介 在并发标记的过程中,因为标记期间应用线程还在继续跑,对象间的引用可能发生变化,多标和漏标的情况就有可能发生。漏标的问题主要引入了三色标记算法来解决。 三色标记法是一种垃圾回收法,它可以让 JVM 不发生或仅短时间发生 STW(Stop The World),从而达到清除 JVM 内存垃圾的目的。 三色标记算法是把 Gc roots 可达性分析遍历对象过程中遇到的对....

Mysql索引优化实战(一)
背景 MySQL 成为了业界主流的数据库存储,随着公司的发展和业务的复杂性,必须需要了解和掌握一些 MySQL 优化技巧 以下是结合自己的实践学习和网上的资料汇总成的一些场景 前置准备 以下 MySQL 版本是 5.7 执行所产生的效果,不排除后续 MySQL 版本升级,MySQL 进行了优化 示例表 首先创建一个 employees,插入 100000 条数据,如果以下 SQL,有可能因为 MySQL 版本不一致,导致无法执行,可以用 navicat 自动数据生成 navicat 数据生成 SQL 语句生成 CREATE TABLE `employees` ( `id` int(11) NOT NULL AUTO_INCREMENT, `name` varchar(24) NOT NULL DEFAULT '' COMMENT '姓名', `age` int(11) NOT NULL DEFAULT '0' COMMENT '年龄', `position` varchar(20) NOT NULL DEFAULT '' COMMENT '职位', `hire_time` timest....

datax启动流程
datax 启动流程 组件 datax 采集流程 Reader:Reader 为数据采集模块,负责采集数据源的数据,将数据发送给 Framework。 Writer: Writer 为数据写入模块,负责不断向 Framework 取数据,并将数据写入到目的端。 Transformer:在数据同步、传输过程中,存在用户对于数据传输进行特殊定制化的需求场景,包括裁剪列、转换列等工作 Job: Job 是 DataX 用以描述从一个源头到一个目的端的同步作业,是 DataX 数据同步的最小业务单元。 Task: Task 是把 Job 拆分得到的最小执行单元。 JobContainer: Job 执行器,负责 Job 全局拆分、调度、前置语句和后置语句等工作的工作单元。 TaskGroupContainer: TaskGroup 执行器,负责执行一组 Task 的工作单元。 TaskGroup: 描述的是一组 Task 集合。在同一个 TaskGroupContainer 执行下的 Task 集合称之为 TaskGroup 参数 CoreConstant 中会提取 datax.home 这个....

二次开发Datax
欸从