- 博客(128)
- 收藏
- 关注
原创 redis - 分布式锁
摘要:分布式锁用于解决分布式系统中多节点访问共享资源的互斥问题。基础实现通过Redis等中间件设置特殊键值对来标识锁状态,并引入过期时间防止死锁。进阶方案包括:1)校验ID确保只有加锁者能解锁;2)Lua脚本实现原子解锁操作;3)看门狗机制自动续期锁;4)Redlock算法通过多节点加锁提高可靠性。此外还可扩展实现读写锁、公平锁和可重入锁等功能。这些机制共同解决了分布式环境下的资源竞争问题。
2026-01-05 15:32:01
832
原创 redis - 缓存
缓存是计算机系统中用于提升性能的关键技术,通过将热点数据存储在访问速度更快的存储介质中(如内存、CPU寄存器)来减少对慢速存储(如硬盘、网络)的访问。在Web应用中,Redis常被用作MySQL等关系型数据库的缓存,以缓解数据库高并发压力。缓存策略包括定期生成和实时生成热点数据,并采用LRU、LFU等淘汰算法管理有限缓存空间。缓存使用中需注意三个典型问题:缓存穿透(查询不存在的数据)、缓存雪崩(大量key同时失效)和缓存击穿(热点key突然失效),可通过参数校验、布隆过滤器、随机过期时间、服务降级等方法解决
2026-01-04 22:03:16
945
原创 redis - 集群
Redis集群通过多组Master/Slave节点实现数据分片存储,解决单机内存不足问题。采用哈希槽分区算法(16384个槽位)分配数据到不同分片,结合一致性哈希思想降低扩容时的数据迁移开销。集群支持自动故障转移,当主节点宕机时会从从节点中选举新主节点。通过Docker可搭建集群环境,演示了集群扩容(添加节点并重新分配槽位)和缩容(迁移数据后删除节点)的操作流程。Redis集群在保证高可用的同时,有效扩展了存储能力,是处理海量数据的分布式解决方案。
2026-01-04 19:36:03
997
原创 redis - 哨兵
Redis哨兵机制实现高可用自动故障转移 Redis主从复制模式存在人工干预复杂、恢复时间长的问题。Redis 2.8引入哨兵机制(Sentinel)实现自动化高可用解决方案。哨兵通过独立进程监控Redis数据节点,当主节点故障时,哨兵节点会协商达成共识,使用Raft算法选举领导者完成故障转移:选择新主节点、调整从节点同步关系、通知应用方。建议部署奇数个哨兵节点以避免单点问题。哨兵机制实现了监控、故障转移和通知三大功能,但无法解决数据存储容量限制问题。实际部署可通过Docker模拟主从节点和哨兵节点集群,验
2026-01-03 21:27:17
640
原创 redis - 主从复制
本文介绍了Redis主从复制模式的基本原理与实现方式。主要内容包括:1)主从模式解决了单点Redis的性能瓶颈和可用性问题;2)主从复制支持全量复制、部分复制和实时复制三种同步方式;3)配置主从关系可通过配置文件或命令实现;4)复制过程涉及复制ID、偏移量等核心概念;5)主从模式支持一主一从、一主多从和树状拓扑等多种部署架构;6)主从复制存在同步延迟和故障转移依赖人工干预的局限性。文章详细阐述了主从复制的配置步骤、数据同步机制以及不同场景下的优化策略,为构建Redis高可用架构提供了技术参考。
2026-01-03 14:43:55
661
原创 redis - 事务
本文对比了Redis和MySQL事务特性的差异。MySQL事务具备ACID特性(原子性、一致性、隔离性、持久性),而Redis事务是弱化版本:1)原子性仅保证命令打包执行但不支持回滚;2)不保证数据一致性;3)无需隔离性(单线程串行执行);4)持久性与事务无关。Redis通过事务队列实现命令批量执行,主要命令包括MULTI(开启)、EXEC(执行)、DISCARD(放弃)和WATCH(监控键值变化)。WATCH采用乐观锁机制,通过版本号检测键值是否被修改,若被修改则放弃事务执行。Redis事务主要确保操作的
2026-01-02 15:49:19
594
原创 redis - 持久化
Redis提供RDB和AOF两种持久化机制。RDB通过定期生成内存快照实现数据备份,适合冷备和主从复制,但实时性较差;AOF通过记录写命令实现实时持久化,支持文件重写压缩,数据可靠性更高。两种机制都采用fork子进程方式,减少对主进程影响。Redis4.0引入混合持久化,结合RDB二进制格式和AOF文本格式优势,在AOF重写时生成RDB格式数据,后续操作仍以AOF格式追加,兼顾恢复速度和实时性。实际应用中可根据数据重要性选择持久化策略,通常推荐AOF作为主要方案。
2026-01-02 11:32:00
684
原创 docker - 镜像、存储卷和网络深入理解
Docker镜像采用分层存储机制,基于联合文件系统(UnionFS)实现,底层由bootfs和rootfs组成。镜像采用写时复制(CoW)技术,容器层可读写,下层均为只读层。网络方面,Docker使用veth pair连接容器与网桥,通过iptables实现NAT转换,支持容器与外部通信。网络命名空间隔离容器网络环境,可通过nsenter工具调试。存储卷通过mount bind实现目录映射,但commit操作不会保存卷内容。Docker支持多种网络模式,如bridge、host、overlay等,满足不同场
2025-12-27 13:52:05
559
原创 docker - 容器编排
Docker Compose是Docker官方提供的容器编排工具,用于定义和运行多容器应用。它通过YAML文件配置服务(service)和项目(project),简化了多容器应用的部署管理。核心功能包括:服务生命周期管理、网络配置、数据卷挂载、端口映射等。使用场景包括单主机部署、环境隔离等。基本使用流程是编写docker-compose.yml文件,然后执行docker-compose up启动应用。常用命令还包括down(停止删除容器)、run(执行一次性任务)、ps(查看容器状态)等。Compose支持
2025-12-23 22:21:55
726
原创 docker - 网络
Docker网络管理是容器化技术的关键组成部分,主要解决容器间通信、容器与宿主机通信以及外部访问等问题。Docker采用CNM架构,包含Sandbox、Endpoint、Network三个核心组件,通过Libnetwork实现网络功能,并支持多种驱动类型(如bridge、host、overlay等)。常见的网络模式包括:默认bridge网络(容器间通信)、host网络(直接使用宿主机网络)、container网络(共享其他容器网络)、none网络(完全隔离)和overlay网络(跨主机通信)。Docker提
2025-12-22 21:21:39
643
原创 docker - 存储卷
Docker存储卷摘要 Docker存储卷是宿主机目录与容器目录的绑定关系,实现数据持久化和共享。存储卷绕过联合文件系统,直接与宿主机文件系统关联,解决容器数据丢失、性能差和互访不便等问题。 存储卷类型 管理卷(Volume):默认映射到/var/lib/docker/volumes,由Docker自动管理 绑定卷(Bind Mount):映射到宿主机指定路径,需人工指定关联关系 临时卷(tmpfs):映射到宿主机内存,容器停止即消失 核心特性 数据持久化:解决有状态应用需求 高性能访问:绕过低效的联合文件
2025-12-22 14:52:25
964
原创 docker - 容器
摘要:容器是镜像的运行实例,具有五种状态(初建、运行、停止、暂停、删除)。与主机进程不同,容器通过命名空间实现资源隔离。文章详细介绍了容器生命周期管理命令(create/run/start/stop等)、资源限制配置(CPU/内存)、日志查看、文件拷贝等核心操作,并通过MySQL/Redis/C++等实例演示了容器化应用部署。重点对比了docker save/load与export/import的区别,以及attached/detached/interactive三种运行模式的特点。最后探讨了容器资源更新和
2025-12-21 18:30:30
582
原创 docker - 镜像
Docker镜像是一个只读的模板文件,采用分层存储结构(UnionFS),每层文件系统都是只读的。镜像解决了环境一致性问题,通过打包完整操作系统文件实现跨环境部署。常用命令包括:docker pull/push(拉取/推送)、docker build(构建)、docker save/load(导出/导入)、docker rmi(删除)等。镜像存储在/var/lib/docker/目录,支持离线迁移和云端共享,服务端会对镜像进行压缩存储。使用镜像时需注意:删除前需先移除关联容器,不同标签可共享同一镜像层以节省
2025-12-20 15:17:45
1095
原创 docker run
本文介绍了Docker常用命令的功能和参数。docker run命令用于创建并运行容器,支持多种参数:-d后台运行、-it交互终端、-p端口映射、--name命名容器、-e设置环境变量等。演示了不同参数组合的使用场景,如后台运行Nginx、限制CPU/内存资源、容器互联等。同时讲解了docker ps命令查看容器状态,支持-a显示所有容器、-f过滤、--format格式化输出等功能。文章通过具体示例展示了如何创建、管理和监控容器,帮助用户掌握Docker的基本操作。
2025-12-20 10:59:10
595
原创 docker - 镜像仓库
本文详细介绍了在Ubuntu和CentOS系统上安装Docker的完整步骤,包括环境检查、旧版本卸载、源配置、安装及验证方法。同时讲解了Docker镜像仓库的结构与管理命令(login/pull/push/search/logout),以及常用镜像和容器操作指令。此外,还提供了搭建Nginx服务的实践示例,包括镜像选取、容器运行和页面修改。最后介绍了BusyBox工具的使用及如何将镜像推送到个人仓库。文章内容涵盖Docker的基础安装、常用操作和实际应用场景,适合作为Docker入门实践参考。
2025-12-20 10:58:08
562
原创 docker - 虚拟化和容器化
本文介绍了虚拟化与容器化技术的基础概念及实现方式。主要内容包括:1)物理机、虚拟机和容器的定义与区别;2)虚拟化类型(硬件层、操作系统层、函数库层)及实现原理;3)Linux命名空间(namespace)和cgroups的资源隔离与控制机制;4)相关命令工具的使用(dd、mkfs、mount、unshare等);5)LXC容器技术的安装与基本操作流程。文章通过技术原理说明和具体命令示例,系统性地阐述了操作系统级虚拟化技术的核心组件与实现方法。
2025-12-17 18:49:36
736
1
原创 日志打印宏
本文展示了一个C语言日志宏的逐步优化过程:从简单的字符串输出宏开始(版本1),逐步添加源码位置(版本2)、可变参数(版本3)、空参数处理(版本4)、时间戳(版本5),最后实现日志分级功能(版本6)。每个版本都解决了前一个版本的不足,最终形成了一个包含时间戳、文件位置、日志等级等信息的完整日志系统。特别介绍了宏定义中的关键技术点,如__FILE__、__LINE__预定义宏、可变参数处理、多行宏定义技巧,以及使用do-while包裹代码块的常见做法。
2025-10-29 21:24:26
281
原创 const和explicit关键字
本文摘要:C++中const关键字在指针中的用法分为三种情况:const在*左边表示指向内容不可修改,在右边表示指针本身不可修改,双重const则两者都不可修改。const修饰函数参数可防止函数内部修改参数;修饰成员函数表明不修改对象状态(mutable成员除外);修饰返回值可防止返回对象被修改。explicit关键字用于防止构造函数隐式转换,增强代码安全性,适用于单参数和多参数构造函数。这些特性共同提升了C++代码的健壮性和可维护性。
2025-10-24 19:26:30
323
原创 c++17
本文摘要总结了C++17引入的关键特性及其应用场景: 结构化绑定:简化数组/结构体的解包操作,支持引用和拷贝绑定,但需注意变量数量匹配和生命周期管理。 inline变量:解决ODR问题,允许头文件定义全局变量而避免链接冲突,支持类静态成员的内联初始化。 if/switch初始化语句:允许在条件语句中声明变量,限定作用域至当前块。 强制拷贝省略:标准化返回值优化(RVO/NRVO),消除不必要的拷贝/移动构造,提升传值返回效率。 if constexpr:编译期条件分支,未选中路径代码不生成,常用于模板元编程
2025-10-20 12:48:04
665
原创 c++14
本文介绍了C++14标准引入的多项重要特性:1. 变量模板:允许模板应用于变量,便于定义类型相关常量;2. 泛型lambda:支持auto参数类型,实现通用函数对象;3. 函数返回类型推导:简化函数声明,支持decltype(auto)精确推导;4. 二进制字面量和数字分隔符:提升代码可读性,便于处理位模式;5. 标准库增强:包括std::exchange、std::make_unique、std::integer_sequence等实用工具;6. 共享互斥量:支持读写锁模式,优化并发性能;7. 用户定义字
2025-10-16 16:04:23
760
原创 c++11扩展
C++中的constexpr与模板元编程摘要 本文系统介绍了C++11以来constexpr关键字和模板元编程的核心概念与应用。constexpr用于指定编译期常量表达式,可修饰变量、函数(包括构造函数和成员函数)和指针,在C++14/17/20中功能不断增强,支持动态内存分配、虚函数等特性。同时详细解析了模板元编程技术,包括类型萃取、SFINAE原则和编译期计算,通过阶乘计算等示例展示了模板特化和递归实例化的应用。文章还对比了auto和decltype的类型推导差异,介绍了现代C++中的强类型枚举、sta
2025-10-14 20:24:36
1019
原创 C++11并发支持库
本文主要介绍了C++11线程库的相关特性及应用。C++11线程库封装了系统级线程接口,具有跨平台和面向对象的特点,支持右值引用、可变模板参数等新特性。文章详细讲解了thread、mutex、atomic、condition_variable等核心组件,以及future异步编程模型。重点内容包括: thread类的跨平台封装及多种构造方式 互斥锁(mutex)及其管理类(lock_guard,unique_lock)的使用 原子操作(atomic)原理及CAS实现 条件变量(condition_variabl
2025-10-11 19:38:21
994
原创 cmake语法
本文摘要:CMake官方文档详细介绍了message函数、变量类型和作用域规则。message函数支持STATUS、WARNING等消息类型,用于调试和错误处理。变量分为普通变量(目录/函数作用域)、缓存变量(全局持久)和环境变量(系统级)。重点阐述了函数和目录作用域的变量传递机制,需使用PARENT_SCOPE选项向上传递值。同时讲解了if条件判断、foreach/while循环、list操作等核心语法,以及函数参数传递(ARGV/ARGC/ARGN)和返回值实现方式。通过示例演示了不同作用域变量的可见性
2025-10-08 12:08:41
961
原创 使用第三方库
CMake打包与测试机制摘要 CMake提供find_package两种查找模式:Module模式(手动查找旧库)和Config模式(现代库自动配置)。Module模式通过Find*.cmake文件定位库,设置输出变量;Config模式直接使用库提供的*Config.cmake文件定义导入目标。官方推荐使用Config模式。 CTest是CMake集成测试框架,通过add_test添加测试用例,支持断言验证和错误追踪。测试失败时会生成详细错误日志。 CPack是CMake打包工具,可自动收集install(
2025-10-06 17:45:40
985
原创 cmake(动态、静态库细节)
本文介绍了现代CMake基于目标的库构建与使用流程,重点讲解了静态库和动态库的创建、安装及查找机制。主要内容包括: 静态库与动态库的构建方法 使用add_library()创建库目标 设置输出路径和编译选项 通过target_include_directories()指定头文件搜索路径 库的安装与发布 使用install()命令安装库文件和头文件 生成导出目标和配置文件 配置find_package()所需的包配置文件 库的查找与使用 通过find_package()查找已安装的库 使用target_lin
2025-10-05 20:17:12
1057
原创 cmake命令行工具介绍
CMake构建系统使用指南:本文介绍了CMake工具链的核心功能 wagering 构建系统生成、编译测试、安装打包的全流程。主要通过命令行操作演示,包括:1)使用cmake命令生成.bin 2 构建系统时会自动寻找CMakeLists.txt文件;2)编译阶段cmake--build与make命令的等效性;3)iavailable.cmake 安装和打包操作的实际效果与原理。详细解释了关键更大 命令如project、message.nvim 等函数的使用方法,以及install安装机制的三个阶段。同时说明
2025-10-01 21:21:15
1081
原创 C++中的四种强制转换
static_cast 是 C++ 中的一种类型转换操作符,用于非多态类型的转换,如基础数据类型之间的转换、枚举与整数的转换、类层次中的上行或下行转换等。它不能用于不相关类型之间的转换。reinterpret_cast 则用于低层次的类型重新解释,如指针与整型之间的转换。const_cast 主要用于移除变量的 const 属性。dynamic_cast 用于多态类型的转换,特别是父类与子类之间的安全转换。强制类型转换应谨慎使用,以避免潜在的错误。
2025-05-18 18:05:11
1072
原创 git工具使用详细教程-------命令行和TortoiseGit图形化
本文介绍了Git的基本概念、常用命令以及图形化工具TortoiseGit的使用方法。Git结构包括工作区、暂存区、本地库和远程库,常用命令如git init、git add、git commit等用于代码管理。TortoiseGit提供了图形化界面,简化了Git操作,如创建仓库、提交代码、更新代码、回滚版本、分支操作等。此外,还介绍了如何解决冲突、忽略文件以及远程仓库的操作,如克隆、推送和拉取。通过这些工具和命令,开发者可以更高效地进行版本控制和代码管理。
2025-05-15 16:40:21
1294
2
原创 --图--
在一些应用问题中,需要。在此过程中。适合于描述这类问题的抽象数据类型称为并查集(union-findset)。下边是我画的一个示例图,好好看看如何划分集合的规则存储并查集的数组有如下特点:1.2.3.下边是并查集合并集合的一个示例图这里将例子中的第二个集合合并到第一个集合。这里的并查集变化如上。通常并查集有如下功能:1、查找元素属于哪个集合沿着数组表示的树形关系,向上找到根节点,即数组中该集合表示负数的位置。2、查看两个元素是否属于同一个集合。
2025-04-17 20:06:05
909
原创 visual studio 2022配置和使用jsoncpp
2、在解压文件的makefiles文件下有个vs71,在vs71中有visual studio项目,不过这里的项目是visual studio2008写的,这里打开之前需要升级。升级完成之后,选中lib_json文件夹进行配置,生成想要的库文件。将解压文件夹下的json文件夹拷贝至新建libjson文件下的include目录,下边是json文件的位置。配置运行时库类型,我刚刚生成库文件的时候选择的MTd类型,所以现在也要选MTd类型。将编译的库文件拷贝至新建文件夹得bin目录,下边是生成库文件得位置。
2024-06-28 15:18:28
2250
4
原创 visual studio 2022配置和使用protobuf
上图证明,我真的测了好多遍,测了好多版本的protobuf,花了很多时间。不过好在最后在vs2022上测通了。
2024-06-28 12:27:26
5403
8
原创 boost asio异步服务器(3)增加发送队列实现全双工通信
构造发送节点,管理发送数据。发送节点的类如下。这个发送节点用于保证发送和接收数据的有效性。
2024-06-11 19:57:42
1099
原创 boost asio异步服务器(2)实现伪闭包延长连接生命周期
在函数内部实现一个子函数,子函数的作用域内能访问外部函数的局部变量。。但是由于闭包会使得函数中的变量都被保存在内存中,内存消耗很大,所以不能滥用闭包,否则会造成程的性能问题,可能导致内存泄露。在上次的echo异步服务器中,在极端情况下客户端关闭导致触发写和读回调函数,二者都进入错误处理逻辑,进而造成二次析构的问题。这里,使用C++11构造成一个伪闭包的状态延长session的生命周期。
2024-05-28 16:14:25
1251
原创 boost asio异步api(1)
服务器有一个欢迎套接字,专门用来接收新的连接的。当每次收到新的连接的时候,欢迎套接字就会产生新的普通套接字用来处理这个连接。这里处理每个连接的套接字都会开启一个Session去处理单个连接。
2024-05-16 20:11:24
1523
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅