- 博客(79)
- 收藏
- 关注
原创 【Sentinel Go】新手指南、流量控制、熔断降级和并发隔离控制
随着微服务的流行,服务和服务之间的稳定性变得越来越重要。Sentinel 是面向分布式、多语言异构化服务架构的流量治理组件,主要以流量为切入点,从流量路由、流量控制、流量整形、熔断降级、系统自适应过载保护、热点流量防护等多个维度来帮助开发者保障微服务的稳定性。
2024-12-08 21:54:11
1235
原创 一文了解MySQL写缓冲Change Buffer(定义 作用 执行过程 触发时机 业务场景)
介绍了写缓冲的定义和作用,并且举了2个例子介绍了执行过程,触发时机、刷数据时机、优缺点、业务场景、配置和对比等
2024-12-06 22:56:24
1232
原创 一文了解MySQL缓冲池buffer pool(作用 原理 淘汰策略 分配 刷新 配置)
介绍了MySQL缓冲池buffer pool的作用、工作原理、管理与淘汰、分配、刷新、监控、实例和配置,一篇文章了解缓冲池
2024-12-06 21:42:31
873
原创 一文了解Gossip协议(简介、适用场景、优点、工作原理、通信方式)
Gossip协议是一种P2P的分布式协议,其核心是在去中心化结构下,通过将信息部分传递,达到全集群的状态信息传播。传播的时间收敛在O(Log(N))以内,其中N是节点的数量。基于Gossip协议,可以构建出状态一致的各种解决方案● 信息的传播可以看作二叉树结构,一个周期里,一个已经知道信息的节点会随机选择一个尚未知道信息的节点传递信息,类似二叉树的层级扩展,这样是指数式增长的,所以传播时间logn。
2024-12-05 19:51:50
1090
原创 Golang内存模型总结1(mspan、mcache、mcentral、mheap)
从上到下分别是寄存器、高速缓存、内存、磁盘,其中越往上速度越快,空间越小,价格越高。关键词是多级模型和动态切换。
2024-12-04 22:19:46
1216
原创 Redis设计与实现第17章 -- 集群 总结3(ASK错误、复制与故障转移、消息)
集群中的各个节点会通过相互发消息的方式来交换集群中各个节点的状态信息,当一个主节点A通过消息得知主节点B认为主节点C进入了疑似下线状态时,主节点A会在自己的clusterState.nodes字典中找到主节点C对应的clusterNode结构,并将主节点B的下线报告添加到clsuterNode结构的fail_reports链表里。Redis集群中的节点分为主节点master和从节点slave,其中主节点用于处理槽,从节点用于复制某个主节点,并在被复制的主节点下线时,代替下线主节点继续处理命令请求。
2024-12-04 18:37:16
1219
原创 Redis设计与实现第17章 -- 集群 总结2(执行命令 重新分片)
Redis集群的重新分片操作可以将任意数量已经指派给某个节点(源节点)的槽改为指派给另一个节点(目标节点),并且相关槽所属的键值对也会从源节点被移动到目标节点。一个集群客户端通常会与集群的多个节点创建套接字连接,而所谓的节点转向实际上是换一个套接字来发送命令。跳跃表来保存槽和键之间的关系,跳跃表里每个节点的分值score都是一个槽号,而每个节点的成员member都是一个数据库键。否则,节点向客户端返回一个MOVED错误,指引客户端转向redirect至正确的节点,并再次发送之前想要执行的命令。
2024-12-03 21:37:16
1009
原创 从零开始了解推荐系统(算法构建、召回、粗排、精排、重排、冷启动、衡量标准)
实际上是一种信息处理逻辑,当获取了用户与内容的信息之后,按照一定的逻辑处理信息后,产生推荐结果。热度排行榜就是最简单的一种推荐方法,依赖的逻辑是当一个内容被大多数用户喜欢,那么大概率其他用户也喜欢。
2024-12-03 20:15:40
3271
原创 从零开始了解推荐系统(整体框架、用户画像、内容画像)
推荐系统的作用是建立更加有效率的连接,更有效率的连接用户与内容和服务,节约了大量的时间和成本。
2024-12-02 21:03:07
1215
原创 Redis设计与实现第16章 -- Sentinel 总结2(检查下线状态 选举领头Sentinel 故障转移)
当Sentinel将这一主服务器判断为主观下线后,为了确认这个主服务器是否真的下线,它会向同样监视这一主服务器的其他Sentinel进行询问,看他们是否也认为主服务器已经进入了下线状态(可以是主观下线,也可以是客观下线),当一个主服务器被判断为客观下线时,监视这个下线主服务器的各个Sentinel会进行协商,选举出一个领头Sentinel,并由领头Sentinel对下线主服务器执行故障转移操作。目标Sentinel的局部领头Sentinel的配置纪元,用于选举领头Sentinel。
2024-12-01 16:44:46
820
原创 Redis进行性能优化可以考虑的一些策略
根据实际的需求选择合适的数据结构,以高效地访问和存储多个属性。比如如果你需要存储用户的多个属性,如用户名、邮箱等,使用哈希可以比使用多个字符串键值对更节省内存较大地key和value会占用更多的内存,还可能影响性能,保持key的简短,并使用简洁的命名约定。比如简化为u:1001:p。也可以做压缩等优化对于多个命令的批量操作,使用Pipeline可以显著降低网络延迟,提升性能。比如,批量设置key可以这样写,这样一次可以发送多个命令,减少了网络往返时间,能够提升性能。
2024-11-30 14:54:59
1125
原创 Redis设计与实现第16章 -- Sentinel 总结1(初始化、主从服务器获取信息、发送信息、接收信息)
介绍了Sentinel的启动和初始化,注意与普通Redis服务器对比;获取主服务器信息和从服务器信息;向主从服务器发送信息;接收来自主从服务器的频道信息
2024-11-29 21:33:55
1207
原创 Redis设计与实现第15章 -- 复制 总结(旧版复制 新版复制 部分重同步 复制 心跳检测)
Redis设计与实现第15章笔记,主要介绍了旧版复制、新版复制、重同步、PSYNC命令、复制和心跳检测机制
2024-11-27 21:24:41
1345
原创 【设计模式】创建型模式之装饰器模式(组成、步骤、优缺点、场景)
装饰器模式(Decorator Pattern)是一种结构型设计模式,它允许向一个现有的对象添加新的功能,同时又不改变其结构。这种模式创建了一个装饰类,用来包装原有的类,并在保持原类方法签名完整性的前提下,提供了额外的功能。代码模式主要是给原始类添加无关的功能,装饰器模式主要是给原始类增强功能,添加的功能都是有关联的。:装饰器和具体组件之间是松耦合的,增加新的装饰器不需要修改组件代码。:可以在不修改原有对象代码的前提下,通过添加新的装饰器来扩展功能。:持有一个组件对象的引用,并实现与组件相同的接口。
2024-11-27 17:51:48
826
原创 Redis设计与实现第14章 -- 服务器 总结(命令执行器 serverCron函数 初始化)
每次serverCron函数执行时,函数都会检查BGSAVE命令或者BGREWRITEAOF命令是否正在执行,如果这两个命令都没在执行,并且aof_rewrite_scheduled属性的值为1,那么服务器就会执行之前被推延的BGREWRITEAOF命令。Redis服务器中有不少功能需要获取系统的当前时间,而每次获取系统的当前时间都需要执行一次系统调用,为了减少系统调用的执行次数,服务器状态中的unixtime属性和mstime属性被用作当前时间的缓存。值为1表示关闭服务器。
2024-11-26 21:25:48
995
原创 【设计模式】创建型模式之单例模式(饿汉式 懒汉式 Golang实现)
一个类只允许创建一个对象或实例,而且自行实例化并向整个系统提供该实例,这个类就是一个单例类,它提供全局访问的方法。这种设计模式叫单例设计模式,简称单例模式。
2024-11-26 20:05:48
1574
原创 【Spring Cloud】 Gateway配置说明示例
之上,它提供了许多有用的功能,例如路由、断路器、限流、过滤器等。中的一个项目,它用于构建微服务应用程序的。谓词集合和过滤器集合组成。请求,过滤器则用于修改请求和响应。中,路由是基本的构建块。当客户端发送一个请求。
2024-11-25 20:47:25
450
原创 一文搞懂MySQL索引的定义、分类、Explain、索引失效和优化
MySQL在存储数据之外,数据库系统中还维护着满足特定查找算法的数据结构,这些数据结构以某种引用(指向)表中的数据,这样我们就可以通过数据结构上实现的高级查找算法来快速找到我们想要的数据。MySQL中常用的的索引数据结构有BTree索引(Myisam普通索引),B+Tree索引(Innodb普通索引),Hash索引(memory存储引擎)等等。
2024-11-25 20:45:00
739
原创 Golang里使用泛型对数组进行去重
要求写一个方法,返回去重后的数组。数组的类型可能是`int64`,也可能是`string`,或是其他类型。如果区分类型的话,每增加一个新的类型都需要重新写一个方法。
2024-11-24 17:00:00
275
原创 解决在Go开发时使用interface{}解析JSON数字会变成科学计数法的问题
golang里使用interface{}解析数字会发现变成了科学计数法格式的数字,不符合实际场景的使用要求。想要数字以不变的方式来进行序列化/反序列化,如何做呢?
2024-11-24 15:00:00
650
原创 一文学会Golang里拼接字符串的6种方式(性能对比)
本文详细比较了Go语言中不同字符串拼接方式,包括基本运算符+、fmt.Sprintf、strings.Join、strings.Builder、bytes.Buffer以及使用[]byte的性能。实验结果显示strings.Builder和bytes.Buffer在效率上有显著优势。
2024-11-24 14:30:00
2197
原创 一文搞懂Golang的空结构体struct{}(优化空间)
struct是Golang里的关键字,用于定义结构类型比如struct{}是有0个元素的结构体.struct{}{}表示类型struct{}的值为空{}
2024-11-24 10:12:48
1043
原创 一文带你入门Golang高质量编程与性能调优实战
性能调优原则要依靠数据不是猜测要定位最大瓶颈而不是细枝末节不要过早优化不要过度优化可以知道应用在什么地方耗费了多少 CPU、memory 等运行指标pprof 是用于可视化和分析性能分析数据的工具性能调优要依靠数据而不是单纯的猜测可以使用pprof来排查性能问题,理解基本原理性能调优首先要保证正确性。
2024-11-22 21:19:11
929
1
原创 用Redis实现去重的任务队列的多种方案
介绍了如何用Redis的List实现去重的任务队列,包括List不重复添加、List重复添加、借助Hash等
2024-11-20 19:48:39
1195
原创 一文搞懂如何实现分布式任务调度(分布式锁 MySQL 负载均衡)
如何实现分布式任务调度,Redis实现分布式锁,MySQL实现任务调度,或是借助开源框架xxl-job等,注意负载均衡
2024-11-20 19:46:11
677
原创 Redis设计与实现第13章 -- 客户端 总结 (属性、标志、创建和关闭)
Redis服务器是典型的一对多服务器程序:一个服务器可以与多个客户端建立网络连接,每个客户端可以向服务端发送命令请求,而服务端接口并处理客户端发送的命令请求,并向客户端返回命令回复。对于每个与服务器进行连接的客户端,服务器都为这些客户端建立了相应的redis.h/redisClient结构(客户端状态),这个结构保存了客户端当前的状态信息,以及执行相关功能时需要用到的数据结构,包括套接字描述符、名字等。
2024-11-19 21:42:51
1201
原创 Redis设计与实现第12章 -- 事件 总结(键空间 过期策略 过期键的影响)
Redis服务器是一个事件驱动程序,服务器需要处理以下两类事件:文件事件:Redis通过套接字与客户端(或其他Redis服务器)进行连接,而且文件事件就是服务器对套接字操作的抽象。服务器和客户端的通信会产生相应的文件事件,而服务器通过监听并处理这些事件来完成一系列网络通信操作时间事件:Redis服务器中的一些操作,比如serverCron函数需要在给定的时间点执行。
2024-11-19 17:50:34
781
原创 Redis设计与实现第11章 -- AOF持久化 总结(实现 重写)
RDB持久化通过保存数据库中的键值对来记录数据库状态的不同,AOF持久化是通过保存Redis服务器所来记录数据库状态。
2024-11-18 23:00:00
1517
原创 Redis设计与实现第10章 -- RDB持久化 总结 (创建、载入、自动保存、文件结构)
Redis是内存数据库,数据库状态存储在内存里,如果服务器进程退出,服务器的数据库状态没有保存到磁盘里,就会丢失。为了解决这个问题,Redis提供了RDB持久化功能,可以把Redis在内存里的数据库状态保存在磁盘里。RDB持久化可以把某个时间点上的数据库状态保存到RDB文件里,既可以手动执行,也可以根据服务器配置选项定期执行。生成的的RDB文件是一个经过压缩的二进制文件,可以通过该文件还原生成RDB文件时的数据库状态。
2024-11-18 18:42:15
1267
原创 Redis设计与实现第9章 -- 数据库 总结(键空间 过期策略 过期键的影响)
Redis 服务器中的数据库管理机制包括多个方面。服务器将所有数据库存储在 `redisServer` 结构的 `db` 数组中,每个数据库由 `redisDb` 结构表示。初始化时,根据配置的 `database` 选项创建数据库,默认为 16 个。客户端通过 `SELECT` 命令切换目标数据库,目标数据库由 `redisClient` 结构的 `db` 指针指向。
2024-11-12 21:48:34
1144
原创 一篇万字长文带你详细了解Redis不同数据类型的常见业务场景
介绍String类型、List类型、Set类型、ZSet类型、Hash类型、Bitmap类型、HyperLogLog类型、GEO类型 的基本用法、业务场景、实际应用和注意事项
2024-10-23 20:11:35
773
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人