自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(170)
  • 收藏
  • 关注

原创 图解redis发布和订阅

1.发布订阅模式又叫观察者模式,是一种消息通信模式:发送者(pub)发送消息,订阅者(sub)接收消息。2.主要的目的是解耦消息发布者和消息订阅者之间的耦合,这点和设计模式中的观察者模式比较相似。3.由三部分组成:发布者(pub),订阅者(sub)和频道(channel)4.Redis 客户端可以订阅任意数量的频道。5.Redis 在订阅者和发布者之间起到了消息路由的功能。

2023-04-09 21:35:07 1194

原创 详解redis的哨兵模式(1)

2.另一方面是关于主服务器属下所有从服务器的信息,每个从服务 器都由一个"slave"字符串开头的行记录,每行的ip=域记录了从服务器 的IP地址,而port=域则记录了从服务器的端口号。当Sentinel发现主服务器有新的从服务器出现时,Sentinel除了会为 这个新的从服务器创建相应的实例结构之外,Sentinel还会创建连接到 从服务器的命令连接和订阅连接。首先,Sentinel系统会挑选server1属下的其中一个从服务器,并将这个被选中的从服务器升级为新的主服务器。

2023-04-07 08:59:23 332

原创 redis杂谈之部分重同步的实现

部分重同步则用于处理断线后重复制情况:当从服务器在断线 后重新连接主服务器时,如果条件允许,主服务器可以将主从服务器连 接断开期间执行的写命令发送给从服务器,从服务器只要接收并执行这 些写命令,就可以将数据库更新至主服务器当前所处的状态部分重同步功能由以下三个部分构成:·主服务器的复制偏移量(replication offset)和从服务器的复制偏移量。·主服务器的复制积压缓冲区(replication backlog)。·服务器的运行ID(run ID)。

2023-04-06 08:55:33 488

原创 redis杂谈之旧版复制(3)

Redis的复制功能分为同步(sync)和命令传播(command propagate)两个操作:·同步操作用于将从服务器的数据库状态更新至主服务器当前所处 的数据库状态。·命令传播操作则用于在主服务器的数据库状态被修改,导致主从服务器的数据库状态出现不一致时,让主从服务器的数据库重新回到一 致状态。

2023-04-06 08:47:10 389

原创 图解redis中的复制

主服务器在接受(accept)从服务器的套接字连接之后,将为该 套接字创建相应的客户端状态,并将从服务器看作是一个连接到主服务 器的客户端来对待,这时从服务器将同时具有服务器(server)和客户 端(client)两个身份:从服务器可以向主服务器发送命令请求,而主 服务器则会向从服务器返回命令回复。正因为主服务器成为了从服务器的客户端,所以主服务器才可以通 过发送写命令来改变从服务器的数据库状态,不仅同步操作需要用到这 一点,这也是主服务器对从服务器执行命令传播操作的基础。

2023-04-06 08:31:53 434

原创 关于redis的杂谈(2)

1.关于AOF文件的解读2.实现服务器命令记录3.客户端命令的属性3.redis事件的调度和执行4.服务器的初始化

2023-03-31 08:50:13 137

原创 诠释serverCron函数在服务器的相关功能

1.引言2.serverCron的功能2.1更新服务器时间缓存2.2更新LRU时钟2.3更新服务器每秒钟执行命令次数2.4更新服务器内存峰值记录 2.5处理sigterm2.6管理客户端资源和数据库资源2.7对持久化的影响 2.8增加cronloops的值

2023-03-31 08:05:55 148

原创 图解redis服务器(1)

到目前为止,服务器已经将执行命令所需的命令实现函数(保存 客户端状态的cmd属性)、参数(保存在客户端状态的argv属性)、参 数个数(保存在客户端状态的argc属性)都收集齐了,但是在真正执行 命令之前,程序还需要进行一些预备操作,从而确保命令可以正确、顺 利地被执行,这些操作包括。命令实现函数会将命令回复保存到客户端的输出缓冲区 里面,并为客户端的套接字关联命令回复处理器,当客户端套接字变为 可写状态时,服务器就会执行命令回复处理器,将保存在客户端输出缓 冲区中的命令回复发送给客户端。

2023-03-29 15:47:57 264

原创 图解redis的client的实现

1.引言2.客户端属性2.1套接字描述符2.2 name2.3客户端标志2.4输入缓冲区2.5命令与命令参数2.6命令实现的函数2.7输出缓冲区2.8身份验证2.9 时间3.客户端的创建的关闭3.1普通客户端的创建3.2普通客户端的关闭3.AOF的伪客户端

2023-03-29 15:09:00 570

原创 关于一些redis杂谈(1)

1.关于RDB和AOF复制对过期时间的处理1.1生成RDB文件1.2载入rdb文件1.3AOF文件的写入1.4 AOF重写1.5复制2.RDB的自动保存2.1自动间隔性保存2.2设置保存条件2.3dirty计数器和lastsave属性2.3检查保存条件是否满足(时间事件)3.关于文件的写入和同步

2023-03-27 11:18:09 480

原创 图解redis的时间事件

redis事件事件 severcron

2023-03-27 10:31:34 450

原创 图解redis中的文件事件

I/O多路复用程序允许服务器同时监听套接字的AE_READABLE事件和AE_WRITABLE事件,如果一个套接字同时产生了这两种事件,那 么文件事件分派器会优先处理AE_READABLE事件,等到 AE_READABLE事件处理完之后才处理AE_WRITABLE事件。

2023-03-26 11:57:43 542

原创 图解redis的AOF持久化

aof重写 aof持久化原理

2023-03-26 11:00:52 364

原创 图解redis的RDB持久化

文件结构如下图:解析:1.REDISRDB文件的最开头是REDIS部分,这个部分的长度为5字节,保存 着“REDIS”五个字符。通过这五个字符,程序可以在载入文件时,快速 检查所载入的文件是否RDB文件因为RDB文件保存的是二进制数据,而不是C字符串,为了简便起 见,我们用"REDIS"符号代表'R'、'E'、'D'、'I'、'S'五个字符,而不是 带'\0'结尾符号的C字符串'R'、'E'、'D'、'I'、'S'、'\0'。

2023-03-25 10:35:02 535

原创 一文详解redis关于过期时间的设置

过期时间 定期删除 策略删除

2023-03-25 09:45:23 2802

原创 redis的基础知识

redis内存回收 对象的空转时长 对象共享

2023-03-24 08:33:33 339

原创 redis命令大全以及示例(持续更新)

redis命令大全

2023-03-22 09:13:42 169

原创 图解redis对象(hash 集合 有序集合)

哈希对象的编码可以是ziplist或者hashtable·哈希对象保存的所有键值对的键和值的字符串长度都小于64字 节;·哈希对象保存的键值对数量小于512个;不能满足这两个条件的哈 希对象需要使用hashtable编码。

2023-03-22 08:47:35 276

原创 图解redis的列表对象

列表对象的编码可以是ziplist或者linkedlist。 ziplist编码的列表对象使用压缩列表作为底层实现,每个压缩列表 节点(entry)保存了一个列表元素ziplist举个例子如果我们执行以下 RPUSH命令,那么服务器将创建一个列表对象作为numbers键的值numbers键的值对象使用的是ziplist编码,这个这个值对象将下图是linklist 另一方面,linkedlist编码的列表对象使用双端链表作为底层实现, 每个双端链表节点(node)都保存了一个字符串对象,而每个字符串对

2023-03-21 08:27:31 131

原创 redis之字符串

可以用long double类型表示的浮点数在Redis中也是 作为字符串值来保存的。如果我们要保存一个浮点数到字符串对象里 面,那么程序会先将这个浮点数转换成字符串值,然后再保存转换所得的字符串值。

2023-03-21 08:07:11 114

原创 redis的对象(如何将redis的数据结构和数据类型联合起来)

通过encoding属性来设定对象所使用的编码,而不是为特定类型的对象关联一种固定的编码,极大地提升了Redis的灵活性和效率,因为Redis可以根据不同的使用场景来为一个对象设置不同的编码,从而优化对象在某一场景下的效率

2023-03-21 07:48:47 164

原创 关于redis的基本数据结构总结

结构是指在一个系统或者材料之中,互相关联的元素的排列、组织。结构按类别可分为等级结构(有层次的一对多)、网格结构(多对多)、晶格结构(临近的个体互相连接)等。

2023-03-20 12:06:32 279

原创 图解redis的压缩列表

压缩列表(ziplist)是列表键和哈希键的底层实现之一。列表键里面包含的都是1、3、5、10086这样的小整数值,以 及"hello"、"world"这样的短字符串。另外,当一个哈希键只包含少量键值对,比且每个键值对的键和值 要么就是小整数值,要么就是长度比较短的字符串,那么Redis就会使 用压缩列表来做哈希键的底层实现。

2023-03-18 12:14:10 560

原创 图解redis之整数集合

redis的整数集合 升级 降级

2023-03-18 11:39:01 507

原创 图解redis的跳跃表

跳跃表是有序集合的底层实现之一。·Redis的跳跃表实现由zskiplist和zskiplistNode两个结构组成,其中zskiplist用于保存跳跃表信息(比如表头节点、表尾节点、长度),而zskiplistNode则用于表示跳跃表节点。·每个跳跃表节点的层高都是1至32之间的随机数。·在同一个跳跃表中,多个节点可以包含相同的分值,但每个节点的成员对象必须是唯一的。·跳跃表中的节点按照分值大小进行排序,当分值相同时,节点按照成员对象的大小进行排序。

2023-03-17 08:52:45 468

原创 图解redis的字典

·字典被广泛用于实现Redis的各种功能,其中包括数据库和哈希键。·Redis中的字典使用哈希表作为底层实现,每个字典带有两个哈希 表,一个平时使用,另一个仅在进行rehash时使用。·当字典被用作数据库的底层实现,或者哈希键的底层实现时, Redis使用MurmurHash2算法来计算键的哈希值。·哈希表使用链地址法来解决键冲突,被分配到同一个索引上的多 个键值对会连接成一个单向链表。·在对哈希表进行扩展或者收缩操作时,程序需要将现有哈希表包 含的所有键值对rehash到新哈希表里面,并且

2023-03-16 16:44:14 323

原创 图解redis之链表的实现

双端:链表节点带有prev和next指针,获取某个节点的前置节点和 后置节点的复杂度都是(1)。·无环:表头节点的prev指针和表尾节点的next指针都指向NULL, 对链表的访问以NULL为终点。·带表头指针和表尾指针:通过list结构的head指针和tail指针,程序获取链表的表头节点和表尾节点的复杂度为O(1)。·带链表长度计数器:程序使用list结构的len属性来对list持有的链表 节点进行计数,程序获取链表中节点数量的复杂度为O(1)。

2023-03-16 16:10:55 437

原创 redis之动态字符串sds的实现

Redis没有直接使用C语言传统的字符串表示(以空字符结尾的字符 数组,以下简称C字符串),而是自己构建了一种名为简单动态字符串 (simple dynamic string,SDS)的抽象类型,并将SDS用作Redis的默认 字符串表示C字符串只会作为字符串字面量(string literal)用在 一些无须对字符串值进行修改的地方sds1.当Redis需要的不仅仅是一个字符串字面量,而是一个可以被修改 的字符串值时,Redis就会使用SDS来表示字符串值那么Redis将在数据库中创建一个

2023-03-16 15:44:54 392

原创 数据库概述之重点

在sql中,必须定义好地段和表结构之后,才能够添加数据,例如定义表的主键、索引、外键等。表结构可以在定义之后更新,但是如果有比较大的结构变更,就会变的比较复杂。在Nosql数据库中,数据可以在任何时候任何地方添加。不需要预先定义。

2023-03-14 10:16:31 146

原创 Nginx upstream实战

通常, 在启动upstream时, 我们将决定以何种方式处理上游响应的包体, 前文说过, 我们会原封不动地转发百度的响应包体到客户端, 这一行为是由ngx_http_request_t结构体中的subrequest_in_memory标志位决定的, 默认情况subrequest_in_memory为0, 即表示将转发上游的包体到下游。这两个方法也是通用的, 它们适用于解析所有的HTTP响应包, 而且这个方法的代码ngx_http_proxy_module模块的实现几乎是完全一致的。

2023-02-24 16:36:54 1771

原创 深度解析linux的文件系统

1.Unix使用了四种和文件系统相关的传统抽象概念:文件、目录项、索引节点和安装点( mount point)。从本质上讲文件系统是特殊的数据分层存储结构,它包含文件、目录和相关的控制信息。文件系统的通用操作包含创建、删除和安装等。2.在 Unix中,文件系统被安装在一个特定的安装点上该安装点在全局层次结构中被称作命名空间,所有的已安装文件系统都作为根文件系统树的枝叶出现在系统中。3.文件:文件其实可以做一个有序字节串,字节串中第一个字节是文件的头,最后一个字节是文件的尾。

2023-02-23 15:55:01 396

原创 关于upstream的八种回调方法

process_header可能会被多次调用, 它的调用次数与process_header的返回值有关如果process_header返回NGX_AGAIN, 这意味着还没有接收到完整的响应头部, 如果再次接收到上游服务器发来的TCP流, 还会把它当做头部, 仍然调用process_header处理,而在下图中, 如果process_header返回NGX_OK( 或者其他非NGX_AGAIN的值) , 那么在这次连接的后续处理中将不会再次调用process_header。

2023-02-22 15:47:10 736

原创 如何使用ngxin的 upstream

4) 在http模块中, 调用ngx_http_upstream_init方法即可启动upstream机制。注意,自己的模板回调方法此时必须返回NGX_DONE,

2023-02-21 15:39:44 1620

原创 http的请求上下文

1.简单地讲, 就是在一个请求的处理过程中,

2023-02-20 15:40:13 1003

原创 error日志的用法

可以看到, 如果只是想把相应的信息记录到日志文件中, 那么完全不需要关心ngx_log_t类型的log参数是如何构造的。特别是在编写HTTP模块时, HTTP框架要求所有的HTTP模块都使用它提供的log, 如果重定义ngx_log_t中的handler方法, 或者修改data指向的地址, 那么很可能会造成一系列问题。

2023-02-20 15:06:13 454

原创 读懂ngxin的http配置(1)

在开发功能灵活的Nginx模块时,需要从配置文件中获取特定的信息,不过,不需要再 编写一套读取配置的系统,Nginx已经为用户提供了强大的配置项解析机制,同时它还支持“- s reload”命令——在不重启服务的情况下可使配置生效例子:总体解析:1.test_str这个配置项在http块内出现的值为main,在监听80端口的 server块内test_str值为server80,该server块内有两个location由mytest模块处理的且每个location中又重新设置了test_str的值,分

2023-01-11 20:42:49 379

原创 如何自定义配置项处理办法和合并

例子:参数解析:1.参数conf就是HTTP框架传给用户的在ngx_http_mytest_create_loc_conf回调方法中分配的结构体ngx_http_mytest_conf_t(相当一座桥梁)2.cf->args是1个ngx_array_t队列,它的成员都是ngx_str_t结构。我们用value指向ngx_array_t的elts内容,其中value[1]就是第1个参数,同理,value[2]是第2个参数 (int main(char*arg....))

2023-01-11 20:38:58 487

原创 一文读懂14种预设方法解析配置项

ngx_conf_set_path_slot

2023-01-09 20:55:19 669

原创 深度解析ngx_command_t结构

因为HTTP框架可以使用预设的14种方法自动 地将解析出的配置项写入HTTP模块代码定义的结构体中,但HTTP模块中可能会定义3个结 构体,分别用于存储main、srv、loc级别的配置项(对应于create_main_conf、 create_srv_conf、create_loc_conf方法创建的结构体),如果需要在解析完配置项后回调某个方法,就要实现 上面的ngx_conf_post_handler_pt,并将包含post_handler的ngx_conf_post_t结构体传给post指 针。

2023-01-09 20:01:27 613

原创 ngxin将磁盘文件作为包体发送

发送文件时完全可以先把 文件读取到内存中再向用户发送数据,但是这样做会有两个缺点:·为了不阻塞Nginx,每次只能读取并发送磁盘中的少量数据,需要反复持续多次。·Linux上高效的sendfile系统调用不需要先把磁盘中的数据读取到用户态内存再发送到 网络中note:1.fd是打开文件的句柄描述符,打开文件这一步需要用户自己来做。Nginx简单封装了一个宏用来代替open系统的调用。

2023-01-09 12:12:02 345

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除