- 博客(17)
- 收藏
- 关注
原创 gRPC基础
gRPC是一个现代的、高性能、开源的和语言无关的通用 RPC 框架,基于 HTTP2 协议设计,序列化使用 Protocol Buffer,一种语言无关的高性能序列化框架,基于 HTTP2+Protocol Buffer保证了的高性能。
2024-10-09 12:20:31
1009
原创 B树、B+树
B树和B+树都是,它们在数据库和文件系统中广泛使用,用于存储和检索数据。B是指balance,也就是平衡的意思。那这俩与平衡二叉树有啥区别?首先要知道AVL树与B树、B+树他们都是自平衡搜索树。分裂节点和合并节点其实很容易发现,如果在数据库逻辑里面,大量的节点如果用AVL树存储,树的整体高度就会超级高,而B树、B+树是矮胖结构,键越多越胖。所以B树、B+树非常适合用于数据库索引和文件系统的目录结构,因为它们可以。
2024-09-26 12:23:11
1045
原创 kafka集群架构与原理
这次我们从消息队列开始讨论。生产者-消费者模型中间需要一个消息队列,以存储生产者的产品。对传统的消息队列来说,它支持点对点(P2P)和发布/订阅(Pub/Sub)两种消息模型。在点对点模型中,消息被发送到一个队列,并且只有一个消费者可以消费该消息。在发布/订阅模型中,消息被发布到一个主题,可以有多个订阅者消费。通常将消息存储在内存或数据库中,可能不具备持久化或只有有限的持久化能力。消息队列能够达到生产者与消费者服务解耦的效果。而kafka是一种。主要使用。
2024-09-24 12:25:21
1552
原创 Nginx反向代理
Nginx是互联网应用的一层网关,是一个高性能的HTTP和反向代理服务器,也是一个IMAP/POP3/SMTP代理服务器。它最初是由俄罗斯的伊戈尔·赛索耶夫(Igor Sysoev)在2002年开发的,目的是为了问题(即同时处理10000个客户端连接的问题)。Nginx以其而闻名。类似于apache,但Nginx更热门,版本迭代频繁,使用c语言写的,最主要的是它跨平台和易用性高。
2024-09-23 12:57:33
955
原创 libevent
它提供了一种机制,可以通知用户何时进行输入/输出操作。它支持多种操作系统,包括Windows、Linux、Unix和Mac OS X。Libevent的特点是高性能、轻量级、跨平台支持,并且,如epoll、poll、select、kqueue等。它还支持I/O事件、定时器事件和信号事件,并且是线程安全的。libevent基于实现,它允许用户注册事件,然后通过事件循环检测事件是否就绪,当事件就绪时,libevent会调用相应的回调函数进行处理。在reactor中,所有的,但是的。
2024-09-20 12:33:57
985
原创 Redis存储原理
我们知道,通过链表组织就是一种应对hash冲突的策略,hash冲突会使索引效率降低,然鹅从源码可以看到有一个负载因子,也就是已有元素与数组长度之比(used/size),负载因子越大表示hash冲突就越大,而我们知道hash时间复杂度是O(1),hash冲突到后面会使时间复杂度增加到O(n)。当负载因子大于1的时候就要进行扩容操作,也就是将数组长度翻倍,增大分母减小负载因子。而当负载因子小于0.1(恰好大于used的2^n)的时候就要进行缩容,因为这是占着茅坑不拉屎,浪费空间。不管扩容还是缩容,数组长度都会
2024-09-18 11:49:33
1603
原创 Redis之pipeline与事务
Redis使用的是网络模型,也就是io多路复用+非阻塞io的异步处理流程(注册事件,在事件循环callback处理事件)。我们可以将每个连接抽象看成一个pipe,哪个pipe中的数据先满就先处理。注意,单reactor指的是acceptor只有一个,而工作线程在6.0版本之前只有一个,也就是单reactor单线程,6.0版本之后就是单reactor多线程。下图为6.0版本之后的reactor模型。但之后的讨论我们基于6.0版本之前,也就是单reactor单线程。
2024-09-14 11:25:42
1389
原创 Redis基础
Redis(Remote Dictionary Server)是一个开源的高性能(key-value)数据库,也称为远程字典服务。它通常被用作数据结构服务器,因为它支持各种类型的数据结构。Redis 以其卓越的性能和低延迟特性而闻名,非常适合用作数据库、缓存系统和消息代理。Redis作为一种服务,使用连接通信,每个命令都是TCP请求,然后Redis再进行TCP回应。
2024-09-13 11:52:52
949
原创 MySQL缓存策略
我们可以先写Redis,设置key的过期时间(一般为200ms),再马上去写MySQL,最后MySQL同步回Redis,如果MySQL写成功了,就可以同步到Redis,这一整个写操作就完成了,如果写MySQL失败了,数据就没有,就不需要同步,Redis的数据也过期自动删除,这样就当没写过。这种策略就实实在在的保证了数据一致性
2024-09-12 12:42:46
1446
原创 MySQL事物原理
在MySQL服务中,系统的主线程负责监听连接,而多个连接线程负责处理连接。这时候多个SQL语句操作数据库,就会出现事务。比如银行存钱后再取钱,如果存钱的中途撤销操作,但取钱操作已经完成等等。事务是一个工作单元,它由。在MySQL中,客户端想要开启事务就要向MySQL发送开启事务请求,再发送一系列SQL语句,也要向MySQL发送事务提交请求,中间若出现差错,我们需要回滚操作。这就是一整套事务操作的流程。事务遵循:事务是数据库的逻辑工作单位,事务中包含的诸多操作。
2024-09-11 12:44:57
2006
原创 MySQL基础
SQL(Structured Query Language,结构化查询语言)是一种专门用来与通信的编程语言。它被广泛用于创建、操作、查询和管理关系数据库中的数据。SQL 语言的功能包括数据查询、数据操作、数据定义和数据访问控制。DML:数据库操作语言。执行增删改操作。DDL:数据库定义语言。定义表,数据库或视图等。我们主要讨论DML与DDL。也就是数据库的增删改查操作。
2024-09-09 17:13:20
1089
原创 用时间轮实现定时器
我们在网络编程中会遇到这样一个场景:我们需要维护大量的TCP连接以进行网络通信,但这些。我们如何高效地管理这些连接?答案是定时器,我们给每个连接设置定时器来自动管理,规定时间内未进行通信则自动关闭连接。但是你应该能很快发现问题,连接数量一多,这些与连接挂钩的定时器也多了,系统的整体性能就会急剧下降,这时候就要请出今天的主角时间轮了。
2024-09-07 17:59:39
1009
原创 CAS与无锁队列
CAS(Compare-And-Swap)是一种,它在多线程编程中用于实现无锁数据结构和同步机制。CAS操作提供了一种机制,允许线程在没有使用传统锁的情况下,安全地更新共享数据。说白了CAS就是对比与交换, 它将一个内存位置上的内容与一个给定的值进行,只有它们才将该内存位置的内容为新的给定值。
2024-09-05 17:43:50
1197
原创 原子操作与锁
今天我们讨论原子操作、锁操作。我们先来看一个案例:在并发编程时,我们使用十个线程对count进行++操作,每个线程加100000次,理论上这个结果是。但很可惜,经过几次实验,得出来的结果总是没有1000000:那么究竟是什么原因呢????从代码逻辑来看,每个线程执行的函数操作都是对count加100000次,那么理论上会得到count的结果为1000000。可实际上,,而这个顺序是不可预测的。假设有两个线程 A 和 B,它们都试图增加一个全局变量count的值。
2024-09-04 16:39:28
722
原创 io_uring
所以为了应对业务需求,弥补AIO的不足,io_uring就出世了。首先它本身在系统中调用上下文就只用往队列里面放请求,仅此而已,因此就;其次它,不仅局限于O_DIRECT文件;此外它的也较高。
2024-09-03 11:37:37
1264
2
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人