自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

Ubuntu黑客

走在不断实践路上

  • 博客(99)
  • 资源 (3)
  • 收藏
  • 关注

原创 redis 整数集合、压缩列表和对象

整数集合整数集合(intset)是redis用于保存整数值的集合抽象数据结构,它可以保存类型为int16_t、int32_t、int64_t的整数值,并且保证集合中不会出现重复元素。数据结构:typedef struct intset { uint32_t encoding;//INTSET_ENC_INT16、INTSET_ENC_INT32、INTSET_ENC_INT6...

2020-02-06 17:39:11 230

原创 redis 跳跃表

每次创建一个新跳跃表节点的时候,程序都根据幂次定律(power law, 越大的数出现的概率越小)随机生成一个介于1和32之间的值作为level数组大小,这个大小就是高度.在同一跳跃表中,各个节点保存的成员对象必须是唯一的,但是多个节点保存的分值却是可以相同的:分值相同的节点将按照成员对象在字典中的大小来进行排序,成员对象较小的节点会排在前面,而成员较大的节点会排在后面跳跃表数据结构:...

2020-01-11 21:56:07 174

原创 redis 字典

redis的字典使用哈希表作为底层实现,一个哈希表里面可以有多个哈希表节点,而每个哈希表节点就保存了字典中的一个键值对typedef struct dictht { dictEntry **table; //hash table 采用开链来解决hash冲突 unsigned long size; //哈希表大小 unsigned long sizemas...

2020-01-09 22:58:15 166

原创 redis 链表

typedef struct listNode { struct listNode *prev; //先前节点 struct listNode *next; //后续节点 void *value; //存储value} listNode;typedef struct list { listNode *head; //head...

2020-01-05 21:40:01 111

原创 redis 字符串

字符串typedef char *sds;struct sdshdr { unsigned int len; //记录已经使用字节数 unsigned int free; //记录未使用字节数 char buf[]; //字节数组};sds组织如下:下面基于sdshdr 结构,分析下一些sds api 调用://新分配一个sds结构,同时buf指向的地...

2020-01-05 21:38:32 97

原创 redis 协议

请求协议:*<参数数量> CR LF$<参数 1 的字节数量> CR LF<参数 1 的数据> CR LF...$<参数 N 的字节数量> CR LF<参数 N 的数据> CR LF举个例子://set mykey myvalue*3$3SET$5mykey$7myvalue这...

2019-12-25 21:13:37 121

原创 redis 时间事件

时间事件保存在aeEventLoop->timeEventHead 以链表的方式进行存储/* Time event structure */typedef struct aeTimeEvent { long long id; /* time event identifier. */ long when_sec; /* seconds */ ...

2019-12-22 18:36:09 212

原创 redis aeMain 网络 reactor

事件循环1 首先listen port 注册到epoll 中,并且设置回调acceptTcpHandleraeCreateFileEvent(server.el, server.ipfd[j], AE_READABLE, acceptTcpHandler,NULL)2 当一个新的客户端connect 的时候listen port 变成可读acceptTcpHandle...

2019-12-17 08:24:10 240

原创 redis initServer

initServer 主要是对程序进行初始化,包括client list 创建、共享常量字符串、调整文件句柄大小、网络Reactor初始化、监听套接字建立、数据库db初始、时间事件初始化等等创建共享对象:createSharedObjects() {//redis都是shared.crlf = createObject(REDIS_STRING,sdsnew("\r\n"));...

2019-12-15 10:34:56 225

原创 redis loadServerConfig

函数原型 void loadServerConfig(char *filename, char *options)redis可以通过指定配置文件和命令行方式修改redis 配置,其中filename就是配置文件,option 保存使用者从命令行启动的参数1读取filename以每行一个命令方式保存在config2 命令行参数以每行一个命令方式保存在config最终都转换成每行一个参...

2019-12-15 10:05:03 316

原创 redis initServerConfig

首先初始化默认配置 变量 默认值 server.runid d3d11e6a9a2ee8876697355a44117dfcfe87fce3 server.configfile NULL server.hz 10 serv...

2019-12-13 12:09:46 152

原创 redis 主体框架

参考了《redis设计与实现第二版》,然后花了一周业余时间 把代码撸了一遍,留下自己的笔记整体框架initServerConfig 主要是设置redis服务默认配置loadServerConfig 对命令行传入的参数和配置文件参数进行赋值和初始化,没有配置的参数就采用initServerConfig默认配置initServer 主要是服务完成初始化,包括client list ...

2019-12-13 07:16:53 113

原创 [nginx源码分析]set process title

由于linux argv和environ环境变量内存地址连续,同时argv[0]代表进程name,所以就可以尽可能的用连续的内存空间(起始地址argv[0])来设置进程name test case如下: */#include <stdlib.h>#include <stdio.h>#include <stdint.h>#include <string.h>#include <unistd

2016-07-30 18:43:49 653

原创 [nginx源码分析]ngx内存池实现

nginx 内存池实现

2015-05-07 16:13:13 806

原创 [nginx源码分析]nginx filter模块解析

nginx源码分析

2015-05-07 15:52:30 986

原创 [nginx源码分析]nginx handler 模块解析

nginx 源码分析

2015-05-07 15:41:32 1876

原创 [nginx源码分析]nginx事件逻辑

nginx 事件逻辑

2015-05-07 15:23:07 800

原创 [nginx源码分析]server_name hash

nginx源码分析

2015-05-07 14:59:39 1735

原创 [nginx源码分析]hash 和header 回调初始化

nginx 源码分析

2015-05-07 14:52:13 1211

原创 [nginx源码分析]location划分

nginx

2015-05-07 14:33:44 1672

原创 [nginx源码分析]配置合并

nginx 配置合并

2015-05-07 14:08:57 1151

原创 [nginx源码分析]配置解析(location作用域)

nginx配置解析(location上下文)

2015-05-07 13:37:08 1146

原创 [nginx源码分析]配置解析(server作用域)

nginx 配置解析 server作用域

2015-05-07 13:12:57 1319

原创 [nginx源码分析]配置解析(http作用域)

nginx http配置解析

2015-05-07 11:37:52 2014

原创 [nginx源码解析]配置解析(event作用域)

nginx源码分析 event

2015-05-07 07:30:58 871

原创 [nginx源码解析]配置解析(main作用域)

nginx配置解析main作用域

2015-05-07 06:58:08 1163

原创 [nginx源码分析]配置解析1

nginx源码分析,配置解析

2015-05-07 06:37:56 1193

原创 [nginx源码分析]主函数解析

nginx源码分析

2015-05-07 06:27:49 1254

原创 [libevent源码分析] event_base_dispatch

libevent源码分析

2015-03-07 06:05:05 6295

原创 [libevent源码分析] event_add

libevent源码分析

2015-03-07 06:00:49 4460

原创 [libevent源码分析] event_set

libevent源码分析

2015-03-07 05:55:23 1925

原创 [libevent源码分析] event_init

libevent源码分析

2015-03-07 05:48:13 2412

原创 wget使用方法(some)

wget使用方法(some)前提说明:Web服务器http://127.0.0.1:8333/test.php 是我自己搭建的一台nginx+phpweb服务器1 post请求 Wget默认发送Get请求,通过指定参数--post-dataor --post-file 这两个选项e.g wget--post-data "aaaa" http://127.0.0.1:8333

2014-04-13 21:18:32 2963

原创 wget 非递归下载

wget 非递归下载篇1整体概括上篇分析的是wget参数解析,本篇主要是分析wget非递归下载html或者文件。wget实际上就是通过sock 向web服务器发送http数据包(GET or POST),web服务器收到请求后,发回回复包给wget,当然了http 传输层是tcp协议,简单来说wget 发tcp包,发送内容符合http协议,web服务器解析(such as nginx、ap

2014-04-13 21:13:54 1732

原创 wget 参数解析篇

1 整体概括:前提说明:本篇wget分析仅仅是参数解析内容,不包括wget的递归和非递归下载,后面文章会陆续进行分析。本次主要分析参数为tries(t) timeout(T) no-clobber quiet(q) recursive(r) help(h)version(V) append-output(a) execute(e) no(n) clobber, 其中括号里面的为wget短选

2014-04-12 13:45:02 4649

原创 [APUE]第十二章 线程控制

线程属性:初始化:int pthread_attr_init(pthread_attr_t*attr);int pthread_attr_destory(pthread_attr_t*attr);分离状态属性设置和获取int pthread_attr_getdetachstate(constpthread_attr_t *attr, int * detachstate);int

2013-05-19 18:12:56 1232

原创 [APUE]第十一章 线程

第十一章 线程线程也有线程ID用pthread_t 表示每个系统对pthread_t 的定义不同。int pthread_equal(pthread_t tid1, pthread_ttid2)获得线程的线程IDpthread_t pthread_self()创建线程int pthread_create(pthread_t *tid, const pthread_atr

2013-05-19 18:09:44 1041

原创 [APUE]第十章 信号

信号概念不存在编号为0的信号。产生信号的方式:1          当用户按某些终端键时,引发终端产生信号。2          硬件异常产生信号,比如SIGSEGV信号。3          进程调用kill函数可将信号发送给另外一个进程或者进程组。4          当检测到某种条件发生时,并应将其通知有关进程时也产生信号。比如SIGPIPE信号。应用程序对产生的

2013-05-19 18:04:49 1090

原创 [APUE]第九章 进程关系

第九章 进程关系进程组每个进程组都有一个组长进程。组长进程的标识是,其进程ID等于进程组ID组长进程可以创建一个进程组,创建该组中的进程,然后终止。只要在某个进程组中有一个进程存在,则该进程组就存在,这与其组长进程是否终止无关。从进程组创建开始到其中最后一个进程离开为止的时间成为一个进程组的生存期。进程中的最后一个进程可以终止,或者转移到另外一个进程组。pid_t getgpid(

2013-05-19 18:01:16 1037

原创 [APUE]第八章 进程控制

第八章 进程控制引言: 如何创建进程?执行程序?进程终止?讲述进程属性的各种ID---实际、有效、保存的用户和ID,他们是如何受到进程控制原语的影响。解释器文件和system函数,进程会计机制。 进程标识符每一个进程都有一个非负整数表示的唯一进程ID,这个进程ID是唯一的,他的使用机制和文件描述符是不相同的。文件打开的都是最小的整数(未打开),进程ID是采用延迟重用

2013-05-19 18:00:13 1892

数据结构 笔记 sani html

一些数据结构笔记,希望对你有帮助,链表 二叉树

2013-03-12

sani 数据结构 算法

一些算法和数据结构的东西,包括sani算法部分

2013-03-10

linux c编程简单攻略

很好主要降级linuxapi编程的事情,主要是为了初学者儿上传的

2011-06-10

空空如也

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

TA关注的人

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