Clay 的技术空间

用进废退 | 艺不压身

大纲

前言

本文将介绍 C++ 如何使用 MySQL C API 连接 MySQL 数据库,适用于 Linux 系统。

版本说明

本文使用的各软件版本如下所示:

软件版本说明
C++11
MySQL C API(Connector/C)8.4.5
MySQL Server8.4.5
Linux SystemDebian 12MySQL C API(Connector/C)同时适用于 Linux 和 Windows 系统
阅读全文 »

大纲

前言

本文将剖析 Nginx 内存池的源码,并介绍内存池的底层设计和工作原理,最后基于 C++ 移植 Nginx 内存池的核心源码。值得一提的是,移植后的 C++ 代码兼容 Windows 和 Linux 平台。

C++ 常见的池

在 C++ 中,常见的池有对象池、内存池、连接池、协程池、线程池、进程池。

阅读全文 »

大纲

前言

本文将剖析 SGI STL 二级空间配置器中的内存池源码,并介绍内存池的底层设计和工作原理,最后移植 SGI STL 内存池的核心源码。值得一提的是,移植后的 C++ 代码兼容 Windows 和 Linux 平台。

C++ 常见的池

在 C++ 中,常见的池有对象池、内存池、连接池、协程池、线程池、进程池。

阅读全文 »

大纲

前言

本文将介绍 Muduo 网络库的使用,在使用 Muduo 之前,建议先熟悉并掌握以下技术内容:

  • 熟悉 C++ 11 语法特性
  • 掌握事件驱动模型(Reactor 模型)
  • 熟悉 C/C++ 多线程并发编程和线程安全设计
  • 熟悉 Linux 网络编程(如使用 socketepoll
阅读全文 »

大纲

前言

学习资源

版本说明

本文使用各软件的版本如下表所示:

软件版本说明
C++ 标准17高版本的 Protobuf 库依赖 C++ 17
Protobuf31.1Protobuf 库,核心代码主要是用 C++ 开发
G++(GCC)12.2.0建议使用 9 版本的 G++(GCC) 编译器
CMake3.25.1C/C++ 项目构建工具
LinuxDebian 12

Protobuf 介绍

  • Protocol Buffers(简称 Protobuf)是 Google 提出的一种高效、可扩展的结构化数据序列化格式,用于数据交换。它独立于平台和编程语言,具有良好的跨平台兼容性和扩展性。

  • Google 为多种主流编程语言提供了 Protobuf 的官方实现,包括 Java、C#、C++、Go 和 Python 等。每种语言的实现都包含相应的编译器插件(protoc)和运行时库,使得开发者可以在不同语言间无缝进行数据通信。

  • 由于 Protobuf 采用紧凑的二进制编码格式,其序列化和反序列化效率远高于基于文本的格式。相比 XML,Protobuf 的传输效率可提高约 20 倍;相比 JSON,也有近 10 倍的性能提升。这使得它特别适用于对性能要求高的场景。

  • Protobuf 广泛应用于分布式系统间的数据通信、异构平台的数据交换,也适合用作网络传输协议的数据格式、高效配置文件的载体、或用于数据持久化存储。作为一种兼具效率与可维护性的序列化方案,Protobuf 在大规模系统设计中具有极高的实用价值。

阅读全文 »

大纲

前言

本文将介绍如何使用 nlohmann/json 库实现 C++ 的 JSON 序列化和反序列化。在网络编程中,常用的数据序列化格式包括 XML、JSON 和 Protobuf。在企业级项目中,Protobuf 被广泛采用,因其具备高效的压缩能力和低带宽占用。相同的数据内容,Protobuf 的体积约为 JSON 的 1/10、XML 的 1/20,极大提升了传输效率。尽管使用上相较 JSON 略显复杂,但在对性能和带宽要求较高的场景中,Protobuf 是更优的选择。

阅读全文 »

大纲

前言

本文将介绍在三台服务器上,手动部署 Kafka-Eagle(EFAK)的集群服务,实现对 Kafka 集群的管理和监控,适用于 CentOS/Debian/Ubuntu 等发行版。

官方资源

阅读全文 »

前言

本教程将使用 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 的客户端,这里不再累述。

阅读全文 »