- 博客(203)
- 收藏
- 关注
原创 初识Redis · 集群
在我们前文介绍的主从复制,主从模式+哨兵模式下,确实能够提高Redis的高可用性,但是不管是主从模式还是加上了哨兵,总的数据容量还是只有一个节点那么大,那么问题来了,在提高高可用的基础上,我们能不能有效的扩展Redis整体的存储容量呢?答案当然是可以的,本章开始,我们就引入了集群,我们可以通过集群,来提高整体的存储容量,那么具体怎么实现的呢,请移步下文吧!
2025-04-30 00:15:58
1012
1
原创 初识Redis · 哨兵机制
在前文我们介绍了Redis的主从复制有一个最大的缺点就是,主节点挂了之后没有办法迅速重启,毕竟即便主节点挂了,人工干预恢复的话,也要花费许多时间,想必各位程序员也不想在夜深人静的时候突然去公司加班就为了修复一下主节点吧?所以,Redis引入了另一个进制,即哨兵机制,一般来说只用主从模式的话,可用性不是很高的,所以一般来说式主从模式+哨兵一起使用。那么我们本文就是围绕哨兵展开一系列的学习了。
2025-04-25 23:44:55
2268
原创 初识MySQL · 复合查询(内外连接)
在前文我们学习了MySQL的基本查询,就是简单的套用了select语句,最多不过是加上了一些聚合函数,使用了group by或者是having等。但是对于MySQL语句来说,查询往往是最复杂的,比如在一次查询中我们可能涉及到多个表的查询,那么我们是如何将这些有关联的表连接在一起的呢?我们是如果将表连接之后使用筛选条件和聚合函数查询出我们想要的内容呢?以上就是我们今天要解决的问题了,那么废话不多说,我们直接进入主题!EMPNO INT PRIMARY KEY, -- 雇员编号。
2025-04-10 21:27:37
1262
原创 初识C++ · 基于红黑树封装map + set
这部分是挺有难度的,因为套了好几层关系,涉及到关系层大概有4层左右,但是呢,多花点时间即可,更重要的还是细心部分,其次就是逐个的去捋清楚每层的关系即可,细心 + 耐心,这里就通关了。
2024-07-31 18:10:10
3121
170
原创 初识MySQL · 事务 · 下
前文我们介绍了MySQL的事务的四大特点,分别是原子性,隔离性,一致性,持久性,其中以上四个特点统称为ACID,不过其实我们学完了事务之后,我们知道所谓的ACID最后不过是通过AID保证C的。前文我们介绍了事务的基本操作,可以通过start transaction或者begin开启事务,使用commit提交事务,也见识了如果不commit就停止服务的话,事务就会自动回滚,默认回滚到起点,我们也可以使用savepoint来回滚。
2025-06-12 23:06:22
1251
1
原创 初识MySQL · 事务 · 上
前文我们介绍了MySQL中的索引,通过磁盘引出MySQL与磁盘交互的基本单位是16KB,而对于16KB来说它是一个结构体,并且在Innodb存储引擎里面是通过B+树的形式进行管理的,那么具体的细节内容各位可移步上文阅读。在本文,我们要介绍的是MySQL中的另一个非常重要的特性:事务,那么本文介绍事务将从生活中的实际例子引出事务,再到什么是事务,事务的基本特性是什么,通过实际的sql语句操作,介绍事务中的不同特性。那么废话不多说,我们直接进入主题吧!
2025-06-12 03:45:00
845
原创 初识Linux · 五种IO模型和非阻塞IO
前文我们已经将网络的基本原理介绍完了,都是通过围绕TCP/IP四层协议,将应用层,传输层,网络层,数据链路层全部介绍完毕,至于部分小主题,比如ARP欺骗,HTTP协议的原理,cookie以及session等内容,我们放在后面介绍。本文以及之后的内容,主要通过是介绍IO相关的问题,通过IO模型的介绍,从而引出多路复用的具体内容,通过介绍select,poll,epoll,最后再单独介绍一下Reactor,网络的基本原理我们就介绍完了。那么废话不多说,我们直接进入五种IO模型。
2025-05-21 21:43:31
1060
1
原创 初识Linux · NAT 内网穿透 内网打洞 代理
本文算是网络原理的最后一点补充,为什么说是补充呢,因为我们在前面第一次介绍NAT的时候详细介绍的是报文从子网到公网,却没有介绍报文是怎么从公网到子网的,因为子网IP不能出现在公网上,公网的报文是怎么一步一步交付的呢?这就是我们今天要讨论的一点内容。接着补充几个点,比如内网穿透和内网打洞的概念,其实NAT也是内网穿透和内网打洞的基础,所以介绍了NAT之后理解内网穿透和内网打洞会容易很多。最后补充一个代理的内容,我们的网络原理部分就算是结束了。那么废话不多说,直接进入主题!
2025-05-21 17:26:20
1160
原创 初识Linux · 数据链路层
前文我们通过OSI模型,一直到TCP/IP四层模型,经过了三篇文章左右的功夫,我们把网络层介绍完毕,主要还是介绍的IP协议的iphdr,以及内网公网的概念,最后是一个IP分片。那么经过一系列介绍,我们最终也到了TCP/IP四层模型的最后一层——数据链路层。那么数据链路层我们这么介绍,从以太网帧协议到认识MAC地址,再到arp协议,最后引入一个交换机的概念,数据链路层我们也就收官了。当数据链路层讲完,我们下一篇文章再补充一点细节部分,具体之后再说咯,那么废话不多说,我们直接进入主题。
2025-05-20 17:17:00
1278
原创 初识MySQL · 索引
前文我们主要是介绍了MySQL的一些基本操作,增删查改一类的操作都介绍了,并且因为大多数情况下,查询的频率远远高于其他操作,所以我们在查询上面,也是花费了一番功夫的。那么本文,我们来介绍查询背后的机制——索引,大多数同学第一次接触到索引的时候,第一感觉肯定是:索引?我们C语言平常学习的索引吗?类似于数组下标一类的?实则不然,在MySQL的索引大有不同。
2025-05-19 17:03:52
919
原创 初识Linux · IP分片
前文IP协议·上和IP协议·下我们已经把IP协议的报头的大多数字段介绍了,唯独有三个字段现在还有介绍,即16位标识,8位协议,13位片偏移,今天,我们将通过IP分片的介绍,隆重介绍这三个字段,那么废话不多说,直接进入主题吧!
2025-05-15 19:27:54
1078
原创 初识Linux · IP协议· 下
前文我们介绍了IP协议的协议头,通过源码等方式我们理解了IP协议中的字段,比如8位协议,比如通过环回问题引出的8位最大生存时间,比如8位协议,首部长度等,通过对字段的理解,我们成功理解了IP报文是如何分用和分离的。并且通过IP地址不够的问题,引出了网段划分的两种方式,以及为什么需要网段划分等问题,以及一个局域网内的主机数应该是2^n - 2,因为存在主机号全0和全1的特殊IP。那么对于IP协议报头我们还没有介绍的是:16位标识,3位标志,13位片偏移,这个话题我们放在后文的IP分片中介绍。
2025-05-15 13:40:20
974
原创 初识Linux · IP协议 · 上
在最开始我们介绍网络的时候,我们从OSI七层模型,一直干到了TCP/IP四层模型,因为OSI七层模型分得太细致了,导致现实中几乎不可能实现,所以我们将前三层合并为了应用层,紧接着是传输层,网络层,以及数据链路层,对于最后的物理层我们不介绍。那么对于应用层来说,我们对应的代码也正在努力更新中,比如基于UDP写了回显服务器,写了查询字典的功能,写了聊天室,基于TCP写了回显服务器,写了断线重连,写了远程执行命令部分,还有一个网络计算器正在更新。也就是说应用层我们已经介绍完毕了。
2025-05-15 05:30:00
1375
原创 初识Linux · TCP的基本使用 · 远程执行命令
前文我们使用TCP实现了一个基本的回显功能,本文我们基于TCP再实现一个比较进阶的功能,预想的结果是主机AB通信,A作为服务器,B作为客户端,B输入常见的命令,能收到该命令在A主机的结果。也就是说B可以作为A的分身执行命令了,那么这里我们是不是还要重新写一遍自定义XShell?当然不用,我们这里使用的函数可以完美解决自定义Xshell的问题。那么话不多说,直接开始编写代码吧!
2025-05-13 06:00:00
1765
1
原创 初识Linux · 传输层协议TCP · 下
前文我们从TCP的报头字段开始介绍,从最开始的首部长度,到16位的源端口号和目的端口号,然后逐渐从TCP的缓存管理机制开始理解TCP报头中的标志位ACK,并且顺便引出了32位的序号和确认序号,从中我们知道了TCP管理报文的时候是依赖的环形缓冲队列,并且报文是以sk_buff的结构体的形式管理起来的。前文最后的大头是三次握手和四次挥手,从三次握手我们理解了标志位SYN,顺带理解了什么是超时重传和知道如果连接异常,那么标志位RST会设置为1,重新建立连接。
2025-05-11 00:00:00
1080
2
原创 初识Linux · 传输层协议TCP · 上
前文有关传输层协议,我们介绍了UDP协议的基本字段以及简单介绍了如何UDP添加报头之后,如何分用,如何封装的,并且简单看了一下UDP的基本源码,发现的确很简单。接着我们引入了报文如何管理起来的问题,我们使用了六字真言,先描述再组织,所以使用结构体sk_buff描述该类型,并且利用了数据结构双链表的方式对其进行管理,我们着重介绍了的是两个指针,分别是head指针和data指针,两个指针的类型都是char*,通过两个指针我们简单展示了报文在向上交付的时候,是如何对UDP的字段赋值的。
2025-05-08 21:28:58
1274
原创 初识Linux · TCP基本使用 · 回显服务器
前文我们介绍了UDP的基本使用,本文我们介绍TCP的基本使用,不过TCP的使用我们这里先做一个预热,即只是使用TCP的API简单实现一个回显服务器就可以了。在本文实现回显服务器的时候,分为了三个版本,我们从第一个不靠谱版本逐渐优化~那么话不多说,我们直接进入回显服务器的实现。
2025-05-08 11:23:34
1020
1
原创 初识Linux · 传输层协议UDP
前文我们介绍了UDP的代码使用,流程也是非常简单的,创建了socket,然后填充对应的信息,最后bind,双方就可以进行通信了。通过代码的编写我们发现UDP是简单的,那么我们进入到源码方面学习UDP也是较为简单的。今天的主题就是UDP协议的相关认识,比如涉及到了源码的指针,相关报文的管理,我们都会介绍到,话不多说,进入主题吧!
2025-05-07 00:30:00
985
原创 初识Redis · 分布式锁
到了分布式锁这一章之后,我们首先能联想到的问题就是线程安全的问题,线程安全指的是多个线程在并发执行的时候先手顺序是不确定的,那么就会出现同时对一个变量操作的情况,对于这种情况我们要保证的就是顺序问题,保证程序在任意执行顺序下的逻辑都是没问题的。那么线程安全问题我们可以简单认为是n个线程对同一个变量操作引发的问题,它的解决方案是使用一把锁,将操作变量的过程锁住,谁持有锁谁就可以进行操作。
2025-04-29 20:21:40
1551
原创 初识Redis · 缓存
我们在Redis的学习中,逐渐了解到了Redis的用途是可以用来当作内存数据库,缓存,消息队列等,虽然现在消息队列的中间件有了更多的选择,但是仍然不影响Redis在内存数据库和缓存中的地位。今天我们就来学习Redis作为缓存的时候,需要注意哪些事项以及对应的缓存更新策略。废话不多说,进入主题。
2025-04-29 16:34:14
1216
原创 初识Redis · 主从复制(下)
前文我们已经介绍过了主从复制的基本概念,即分布式系统中存在多个Redis节点,一个是充当为主节点,其他的为从节点,并且从节点也是可以成为主节点,不过这个从节点是没有办法更改数据的。而主从模式解决的问题是单点问题,当我们连接上主节点之后,我们通过info replication是可以查看对应的连接信息的。我们拿一份来看看:保存主节点的信息->tcp连接->ping->验证权限->同步数据集->命令持续复制。如何同步数据。废话不多说,直接进入主题吧。
2025-04-24 21:28:25
940
原创 初识Redis · 主从复制(上)
主从复制这里算得上是一个大头了,主要是因为主从复制它解决的问题,就是比较契合于我们当代网民的一个核心点,即人多了数据读写不过来怎么办?我们在Redis的第一篇中写到分布式系统架构的由来是从单机架构,然后引入多台机器,每台机器还可以细分工作内容,这样的一个流程引出了分布式系统,甚至到了微服务部分。单点问题,如果只有一台机器,那么就意味着两个点,第一,某个服务的性能和并发量是较为有限的,因为不管是应用层服务还是数据库服务都要从这一台机器来完成,第二。
2025-04-24 19:30:07
1432
原创 初识Redis · 事务
前文我们花了大部分篇幅介绍了持久化,涉及到了RDB和AOF机制,涉及的文件有dump.rdb,appendonly.aof,涉及到的命令有save,bgsave,以及介绍了混合持久化的机制。并且理解了持久化主要是针对的Redis是一个内存级数据库的。那么本文,我们就开始介绍一下Redis中的事务。
2025-04-23 23:04:19
1048
原创 初识Redis · 持久化
本文开始,就已经算是Redis的进阶篇文章啦,因为从本文开始就要开始涉及到了Redis的一些特性和一些底层原理了。那么首当其冲的,就是Redis中的持久化了,我们提及持久化之前,我们不妨回想一下MySQL中的事务有哪些特性,一共有4个是吧,分别是原子性,一致性,持久性,隔离性。对于MySQL中的持久性,因为MySQL中和硬盘打交道的,也就是说重启了服务器之后,数据依旧是存储在硬盘的,那么数据也就有了持久性的特点。
2025-04-23 21:56:06
974
原创 初识Redis · C++客户端set和zset
前文我们已经介绍了string list hash在Redis-plus-plus的使用,本文我们开始介绍set和zset在redis-plus-plus的使用。本文作为Redis初阶的一个收尾,介绍完对应的使用之后,我们就可以进入到Redis的底层原理了。
2025-04-21 22:28:08
921
1
原创 初识Redis · C++客户端list和hash
在上一篇文章我们介绍了string的基本使用,并且发现几乎唯一的难点就是使用迭代器方面,并且我们从上篇的迭代器简单引出了五种迭代器,分别是输入迭代器,输出迭代器,前向迭代器,双向迭代器,随机迭代器,那么这几种迭代器是我们在C++学习的时候没有具体学习的,当然,在这里我们也是简单了解了一下。在本文,我们就通过Redis的客户端的方式使用一下list和hash对应的API。废话不多说,直接进入主题。
2025-04-21 20:37:11
1194
原创 初识Redis · C++客户端string
对于mset和mget来说,较为特殊,使用mset的时候,我们有两种方式,一种,我们可以直接使用initailizer_list初始化,就像构建key 和 key1的时候,我们也可以通过重载迭代器的方式,即我们先定义一个容器,可以是list可以是set可以是Vector,构造好了之后,mset直接传入两个的迭代器的就可以了。不过就需要你包含对应的头文件了。其次,我们还能理解的是,如果我们get的是一个不存在的键值,那么OptionalString返回值就是类似于nil的结果,所以我们最好是做一个类型检查。
2025-04-18 21:19:58
1400
1
原创 初识Redis · 客户端“Hello world“
前文我们已经介绍了Redis的不常见的五种数据类型,并且补充了几个渐进式命令和数据库管理命令等,最后简单认识了一下RESP协议,但是老实说,我们只能算是知道了这个协议,对于这个协议的具体细节,我们就要到后面再说了。但是我们至少知道了RESP编码的某些方式,那么前文其实主要是为了使用定制化的Redis客户端做准备,即从本文开始,我们不再是去使用命令行终端了,我们从本文开始,配置好了对应的环境,我们就可以上手在.cc文件里面写对应的代码了。
2025-04-18 15:24:05
1196
原创 初识Redis · 命令、数据结构补充、协议
在前文,我们总览一下,我们已经介绍了什么是Redis,Redis的应用场景是什么,以及我们是从分布式系统引出了Redis,并且引入了负载均衡的概念,以及微服务的概念,具体是什么,各位同学可以移步到对应的Redis的第一篇文章。那么从上文,我们知道了Redis可以使用在缓存,也可以使用为数据库,也可以使用为消息队列使用,不过Redis现在似乎不是很适合当作消息队列来用,虽然说list可以吧,一会儿我们介绍的stream也可以,但是还有更可以的,所以消息队列方面的话,Redis可能差了一点点意思。
2025-04-17 18:13:31
1225
原创 初识Redis · set和zset
在前几篇Redis的基本数据类型中,我们已经了解了string list hash,并且了解了对应的内部编码和实际的应用场景,也是对于基本的命令操作花了比较多的文字描述的去介绍。那么在本文呢,既然有了前几个类型多个基础,我们学习set和zset也是会比较轻松的了。废话不多说,我们直接进入主题吧。功能需求排行榜系统文章热度榜目标成员用户 ID文章 ID分数含义积分、活跃度更新频率实时(如游戏加分)查询方式Top N、用户排名、分页热榜分页、热度值查询清理策略。
2025-04-17 00:00:00
1229
1
原创 初识Redis · list和hash类型
前文我们已经介绍了string的基本使用,以及对应的基本命令,最后也是简单的理解了一下string的应用场景,比如计数统计器啊,比如作为缓存的存放常用的数据啊什么的,当然也有通过设置key的过期时间,然后整个分布式锁什么的。以上是对string类型的简单介绍,本文我们就来介绍列表和哈希类型,老实说,不管是对于string类型来说还是hash类型来说,咱们在C++的时候就有了相应的语言基础,所以我们理解起来还是非常容易的。
2025-04-14 21:54:35
1449
原创 初识Redis · 数据类型和初识string
前文我们已经介绍了基本的命令,涉及到的命令有set,get, expire, ttl, type等命令,并且从中引入了过期策略的实现,涉及到了惰性清除和定期清楚,并且我们还介绍了为什么不引入定时器,因为大概率会有另一个线程的参与,而对于Redis来说,它是一个单线程模型,这就违背了。
2025-04-14 01:15:00
726
原创 初识Redis · 环境和通用命令
前文我们对于分布式系统有了一个简单的认识,并且我们理解Redis的作用可以用来当作缓存热点数据,并且可以作为消息队列的中间件,不过用在中间件的时候其实是Redis的初心,到了后面有了更多的,更加优质的中间件作为消息队列的,所以Redis可能征战其他的战场更加合适了。
2025-04-12 04:00:00
776
2
原创 初识Redis · 简单理解Redis
本文只是作为Redis的一篇杂谈,简单理解一下Redis为什么要存在,以及它能做到和它不能做到的事儿,简单提及一下它对应的优势有什么,不足有什么之类的。总之,本文只是Redis入门的杂谈,咱们看看即可~
2025-04-10 23:59:49
1155
原创 初识网络 · udp的基本使用
在本文的这个系列,会涉及到不同协议的基本使用到背后的原理机制,那么从一开始我们先实操,比如我们先尝试编写一款具有回显功能的Udp服务器,再尝试对它加一点业务,最后,我们甚至可以使用多线程部分进行服务器的一个升级。用到多线程的部分比如我们要写一个群聊服务器,像微信的群聊那样,每个人都可以收发消息,当然了,这是后话了,这个的基础建立在了多线程的基础之上,所以我们着重点还是在udp协议本身的使用。
2025-04-07 22:07:09
971
原创 初识MySQl · 内置函数
在前文的学习我们已经简单了解了部分函数,比如count()函数什么的,今天我们主要是笼统的学习一下MySQL中的函数,仅仅从使用的角度来学习,如果要深究下去可能需要学习到事务部分了,那么因为事务还没有学习,所以我们这里就只讲怎么使用了。那么废话不多说,直接进入主题吧!
2025-03-28 22:27:53
809
原创 网络基本概念认识(2)
本文同样作为博主的二刷网络课程的文章,主要涵盖的主题还是网络基本概念的认识,从上一篇文章遗漏的点加上引入的一些知识点共同组成当前的知识点。在这篇文章收尾之后,我们就会开始愉快的TCP UDP IP ARP Cookie Session......之旅,所以在面临风暴之前,我们还是尽可能的将网络基础部分理解吧。局域网的分类,第二次认识协议,认识MAC地址IP地址,理解网络通信中的socket编程等。当然了,重点在于...其实都是重点哈哈哈。那么废话不多说,我们直接进入主题吧!!
2025-03-28 15:19:51
1521
原创 初识MySQL · 数据类型
对于MySQL来说,是一门编程语言,可能定义不是那么的严格,但是对于MySQL来说也是拥有自己的数据类型的,比如tinyint,varchar等,不过通过本章的学习,你就会知道,这里的数据类型其实和C语言中的数据类型挺像的。废话不多说,我们直接进入主题。
2025-03-27 10:27:26
707
原创 初识MySQL · 约束
对于约束来说,是一种限制数据的方式,这里的约束和生活中的约束是差不多的,比如数据来说,生活中的语文成绩在150以内,0分以上,如果有谁给你说我语文考了151分,那指定是扯淡,同样的,拿我们班级中的学号来举例,学号不能有重复的吧?在MySQL中就可以通过主键或者是唯一键来约束数据不能重复,等等等等。说白了,我们学习这里的约束和结合生活中的场景是非常容易理解的,那么话不多说,我们直接进入主题。
2025-03-26 15:29:31
1056
sort.h排序算法的实现
2024-09-19
C语言中的字符异位词分组
2024-09-28
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅