avatar
文章
70
标签
17
分类
14

主页
目录
  • 归档
  • 标签
  • 类别
友链
关于我
Iterfun's Blog
主页
目录
  • 归档
  • 标签
  • 类别
友链
关于我

Iterfun's Blog

📝Redis-高级篇-1-2:分布式缓存-主从集群
发表于2025-06-01|非关系型数据库Redis
1 主从集群结构单节点 Redis 的并发能力是有上限的,要进一步提高 Redis 的并发能力就需要搭建主从集群,实现读写分离。 搭建流程(TODO:补充) 2 主从数据同步原理两个重要概念master 判断 slave(replica 同义) 是不是第一次同步数据的逻辑涉及到两个重要概念: Replication Id:简称 replid,是数据集的标记,id 一致则说明是同一个数据集。每一个 master 都有唯一的 replid,slave 则会继承 master 节点的 replid。 offset:偏移量,随着记录在 repl_baklog 中的数据增多而逐渐增大。slave 完成同步时也会记录当前同步的 offset。如果 slave 的 offset < master 的 offset,则说明 slave 数据落后于 master,需要更新。(如果相等则说明当前是数据一致的。) 因此,slave 做数据同步时,必须向 master 声明自己的 replication id 和 offset,master 才可以判断到底需要同步哪些数据。 全量同步 全量同步的流 ...
📝Redis-高级篇-1-1:分布式缓存-持久化机制
发表于2025-05-31|非关系型数据库Redis
1 RDB (数据快照)概念RDB(Redis Data Backup file) = Redis 数据备份文件 = Redis 数据快照 把内存中的所有数据都记录到磁盘中。Redis 实例故障重启后,从磁盘读取快照文件恢复数据。 .rdb 文件默认保存在当前运行目录。 save 命令 和 bgsave 命令 save:由 Redis 主进程来执行 RDB,会阻塞所有命令 完成后返回 “ok” bgsave:开启子进程异步执行 RDB,避免主进程受到影响 会立刻返回 “background saving started” 配置Redis 会默认在服务停止时触发 RDB,但是也可以在 redis.conf 中配置,格式如下: 123456# 900 秒内如果至少有 1 个 key 被修改,就执行 bgsavesave 900 1save 300 10save 60 10000# save "" 表示禁用 RDB# save "" 其他常用配置: 12345678# 是否压缩,建议不开启,因为也会消耗 CPU,而磁盘相对很 ...
📝Redis-原理篇-1:数据结构
发表于2025-05-29|非关系型数据库Redis
1 Simple Dynamic String (简单动态字符串)因为 C 语言的字符串存在很多问题: 获取字符串长度需要遍历,效率低 非二进制安全(无法处理 ‘\0’ 等特殊字节) 不支持动态扩容 所以 Redis 没有直接使用 C 语言的字符串,而是构建了一种新的字符串结构:SDS(Simple Dynamic Strings),简单动态字符串 SDS 的结构SDS 本质上是一个结构体, char[] 由 SDS 自己来管理 根据字符串长度的不同,SDS 提供多种结构体实现来支持不同大小的字符串(如下图中为 sdsdr8),以节省内存空间 动态扩容——内存预分配当向 SDS 追加字符串超出当前容量时,会自动申请更大的内存: 新字符串长度 < 1MB:新容量 = 扩展后长度 x 2 + 1 新字符串长度 >= 1MB:新容量 = 扩展后长度 + 1MB + 1(每次固定增长 1MB,防止几何增长造成浪费) 结构就分为这两部分: Header:记录当前字符串的长度等信息,便于读取 buf[]:真实存储字符串的 char[] SD ...
📝RocketMQ-2:进阶知识
发表于2025-05-28|消息队列RocketMQ
消息的特殊处理错乱的消息顺序消息有序指的是可以按照消息的发送顺序来消费(FIFO)。RocketMQ 可以严格地保证消息有序,可以分为分区有序或者全局有序。 顺序消费的原理解析: 在默认情况下,消息发送会采取 Round Robin 轮询方式把消息发送到不同的 queue(分区队列);而消费消息的时候从多个 queue 上拉取消息,这种情况发送和消费是不能保证顺序的。 但是如果控制发送的顺序消息只依次发送到同一个 queue 中,消费的时候只从这个 queue 上依次拉取,就能够保证顺序。 当所有消息都路由到同一个 queue 且被顺序消费时,称为全局有序;若消息被分散到多个 queue,但每个 queue 内部保持顺序,则称为分区有序(或局部有序)。 以订单业务为例,一个订单的顺序流程是:创建、付款、推送、完成。订单号相同的消息会被先后发送到同一个队列中,消费时,同一个 OrderId 获取到的肯定是同一个队列。 (TODO:画图) 顺序消息 订单步骤实体类 12345678910111213141516171819202122232425262728293031/** * 订单的 ...
📝RocketMQ-1:基础知识
发表于2025-05-26|消息队列RocketMQ
https://rocketmq.apache.org/ 为什么使用 MQ?-> MQ 的优势和劣势优势(作用): 应用解耦 异步提速 削峰填谷 劣势: 系统可用性降低 系统复杂度提高 异步消息机制 消息顺序性 消息丢失 消息一致性 消息重复使用 应用解耦:消费方存活与否不影响生产方系统的耦合性越高,容错性就越低,可维护性就越低。 主流 MQ 产品对比 ActiveMQ:Java 语言实现,万级数据吞吐量,处理速度 ms 级,主从架构,成熟度高 RabbitMQ:Erlang 语言实现,万级数据吞吐量,处理速度 us 级,主从架构 RocketMQ:Java 语言实现,十万级数据吞吐量,分布式架构,功能强大,扩展性强 Kafka:Scala 语言实现,十万级数据吞吐量,处理速度 ms 级,分布式架构,功能较少,应用于大数据较多 RocketMQ 架构图(TODO:画图) 环境搭建(略)消息发送(重点)主要内容 基于 Java 环境构建发送与消息接受基础程序 单生产者-单消费者 单生产者-多消费者 多生产者-多消费者 发送不同类型的消息 同步消息 异步消息 单向消 ...
记录 Docker 设置新源记录解决 Error response from daemon
发表于2024-10-17|其他
问题用 Docker 拉取 MySQL 的时候报错: docker: Error response from daemon: Get “https://registry-1.docker.io/v2/“: net/http: request canceled while waiting for connection (Client.Timeout exceeded while awaiting headers). 解决方式:编写配置文件(2024/10/17 目前可用)将可用的镜像仓库地址写入 daemon.json 配置文件(没有就新建) vim /etc/docker/daemon.json写入: 123456789101112131415161718192021222324{ "registry-mirrors": [ "https://2a6bf1988cb6428c877f723ec7530dbc.mirror.swr.myhuaweicloud.com", "htt ...
LC-155-最小栈
发表于2024-06-16|数据结构/算法
题意设计一个支持 push ,pop ,top 操作,并能在常数时间内检索到最小元素的栈。 实现 MinStack 类: MinStack() 初始化堆栈对象。 void push(int val) 将元素val推入堆栈。 void pop() 删除堆栈顶部的元素。 int top() 获取堆栈顶部的元素。 int getMin() 获取堆栈中的最小元素。 思路代码12345678910111213141516171819202122232425class MinStack {public: stack<int> A, B; MinStack() {} void push(int val) { A.push(val); if (B.empty() || val <= B.top()) B.push(val); } void pop() { if (A.top() == B.top()) ...
📝Linux 常用命令整理
发表于2024-06-13|操作系统Unix/Linux
1. 目录结构/:所有文件和目录的根目录/usr/bin:存放系统的可执行文件,可以在任何目录下执行。/usr/local/bin:存放用户自己安装的可执行文件,可以在任何目录下执行。/etc: 存放系统的配置文件,如:/etc/profile 是环境变量的配置文件。/home: 每个用户的家目录,保存用户的私人数据,目录名默认和用户名相同。/opt: 存放用户额外安装的软件,类似 Windows 中的 Program Files 目录。 2. 常用命令文件 & 目录 查看和切换目录 1234567891011121314查看: pwd # 显示当前目录路径 ls # 列出当前目录下文件和目录 ls -l 或 ll # 列出当前目录下文件和目录(详细信息)切换目录: cd /opt # 切换到 /opt 目录 cd .. # 返回上一级目录 cd bin # 切换到当前目录的 ...
LC-617-合并二叉树
发表于2024-06-13|数据结构/算法
https://leetcode.cn/problems/merge-two-binary-trees/ 题面给定两个二叉树,想象当你将它们中的一个覆盖到另一个上时,两个二叉树的一些节点便会重叠。 你需要将他们合并为一个新的二叉树。合并的规则是如果两个节点重叠,那么将他们的值相加作为节点合并后的新值,否则不为 NULL 的节点将直接作为新二叉树的节点。 示例 1: 注意: 合并必须从两个树的根节点开始。 思路123456789TreeNode* mergeTrees(TreeNode* t1, TreeNode* t2) { if (t1 == NULL) return t2; // 如果t1为空,合并之后就应该是t2 if (t2 == NULL) return t1; // 如果t2为空,合并之后就应该是t1 // 修改了t1的数值和结构 t1->val += t2->val; // 中 t1->left = mergeTrees(t1->left, t2-&g ...
LC-106-从中序与后序遍历序列构造二叉树
发表于2024-06-13|数据结构/算法
https://leetcode.cn/problems/construct-binary-tree-from-inorder-and-postorder-traversal/ 题面根据一棵树的中序遍历与后序遍历构造二叉树。 注意: 你可以假设树中没有重复的元素。 例如,给出 中序遍历 inorder = [9,3,15,20,7] 后序遍历 postorder = [9,15,7,20,3] 返回如下的二叉树: 思路12345678910111213141516171819202122232425262728293031323334353637383940TreeNode* traversal(vector<int>& inorder, vector<int>& postorder) { if (postorder.size() == 0) return NULL; // 后序遍历数组最后一个元素,就是当前的中间节点 int rootValue = postorder[postord ...
123…7
avatar
iterfun
文章
70
标签
17
分类
14
最新文章
SaaS 系统架构设计思路2025-10-20
📝《深入理解 Java 虚拟机》笔记2025-07-03
(待更新)📝JVM-2:JVM-垃圾回收2025-06-12
📝Redis-原理篇-4:内存回收2025-06-07
📝Redis-原理篇-3:通信协议2025-06-07
分类
  • Java6
    • JVM3
    • Java SE3
  • 关系型数据库1
    • MySQL1
  • 其他2
  • 操作系统1
    • Unix/Linux1
标签
二叉树 递归与递推 数论 前缀和 递推 树 队列 枚举 栈 哈希表 滑动窗口 动态规划 二分 优先队列 字符串 链表 剑指Offer
归档
  • 十月 20251
  • 七月 20251
  • 六月 20259
  • 五月 20254
  • 十月 20241
  • 六月 202435
  • 九月 20233
  • 五月 20231
粤ICP备2022058194号