Clay 的技术空间

用进废退 | 艺不压身

前言

书籍阅读

强烈建议在阅读完本文的内容后,多花点时间深入读一遍《深入理解计算机系统 - 第三版》的第 7 章 “链接”。

编译与链接原理

编译命令

步骤命令
1. 预处理 gcc -E hello.c -o hello.i
2. 编译到汇编代码 gcc -S hello.i -o hello.s
3. 汇编到目标代码(机器语言)gcc -c hello.s -o hello.o
4. 链接,生成可执行文件 gcc hello.o -o hello
以上四个步骤,可以合成一个步骤,直接编译链接成可执行的目标文件 gcc hello.c -o hello
阅读全文 »

前言

本教程将使用 Docker 安装单机版的 Seata Server、Nacos、MySQL,并实现以下配置目标:

  • (1) 配置 Seata Server 使用 Nacos 作为注册中心
  • (2) 配置 Seata Server 使用 Nacos 作为配置中心
  • (3) 配置 Nacos 将配置信息存储(持久化)到 MySQL 中
  • (4) 基于 Nacos 配置中心,配置 Seata Server 使用 MySQL 数据库来存储全局事务会话信息
阅读全文 »

大纲

前言

本文将介绍在 SpringBoot 项目中,如何基于 Redis + Lua 脚本 + AOP + 反射 + 自定义注解自研分布式限流组件,且支持拔插式使用。由于篇幅有限,下面使用的是 Redis 单机服务,若是在生产环境,为了保证系统的可用性,建议部署 Redis 集群,并使用 Redisson 作为 Redis 的客户端,这里不再累述。

阅读全文 »

大纲

MySQL 锁的介绍

锁的类型

在 MySQL 中,锁机制可以用来解决事务并发问题。MySQL 的锁有以下几种类型:

  • 按锁的粒度可以分为:
    • 行锁:锁住某行数据,锁粒度最小,并发度高。开销大,加锁慢,会出现死锁。
    • 表锁:锁住整张表,锁粒度较大,并发度低。开销小,加锁快,不会出现死锁。
    • 间隙锁:锁住的是一个区间。
    • 全局锁:锁住整个数据库,锁粒度最大。
阅读全文 »

大纲

最左前缀原则的介绍

最左前缀原则指的是:使用组合索引(联合索引)时,查询条件需要从索引的最左列开始匹配,并且不跳过索引中的列。如果跳跃某一列,索引将会部分失效 (这一列后面的字段的索引会失效)。比如,针对 A、B、C 三个字段建立了一个组合索引,那么在写一个 SQL 时就一定要提供 A 字段的查询条件,这样才能让组合索引生效。这是由于在建立 A、B、C 三个字段的组合索引时,MySQL 底层的 B+ 树是按照 A、B、C 三个字段从左往右去比较大小进行排序的,也就是说 B+ 树的索引结构依赖于从左到右逐层递进地有序搜索路径。如果查询条件中缺少了最左边的列,B+ 树将无法确定初始的搜索路径,从而无法利用索引进行高效查询。

阅读全文 »

大纲

索引的介绍

索引概述

MySQL 官方对索引的定义为:索引(Index)是帮助 MySQL 高效获取数据的数据结构。在数据之外,数据库系统还维护着满足特定查找算法的数据结构,这些数据结构以某种方式引用(指向)数据,这样就可以在这些数据结构上实现高级查找算法,这种数据结构就是索引。简而言之,索引的本质是数据结构

阅读全文 »

查看整机系统性能

top

使用 top 命令,可以查看系统的负载情况,重点关注的是 %CPU%MEMload average 三个性能指标。

1
top
阅读全文 »

大纲

前言

本文主要介绍 Sentinel 整合主流框架,比如 OpenFeign、Spring Cloud Gateway 等。

阅读全文 »

ES 优化

  • 索引优化

    • 映射(Mapping):合理设计索引映射,避免使用动态映射,并为每个字段明确指定数据类型。
    • 字段类型:对于不需要全文搜索的字段,使用 keyword 类型而非 text 类型。
    • 合并(Merging):通过配置 index.merge 参数优化段合并,以减少 I/O 开销。
    • 刷新间隔:调整 index.refresh_interval 参数,减少刷新频率以提高写入性能(默认是 1 秒,可以根据实际需要调整)。
  • 查询优化

    • 缓存:利用 ES 的节点查询缓存和过滤器缓存来加速常见查询。
    • 分片首选项:设置 preference 参数来避免每次查询都访问不同的副本,从而提高缓存命中率。
    • 分页:避免深分页,使用 search_afterscroll 来处理大量结果集。
阅读全文 »