- 博客(33)
- 收藏
- 关注
原创 redis cluster 重新分片
我们在IP地址127.0.0.1已经创建好了三个节点,端口分别是7000、7100和7200,以下分别用7000、7100和7200表示这三个节点,这三个节点的配置文件中的配置选项cluster-config-file分别为nodes-7000.conf、nodes-7100.conf和nodes-7200.conf。初始化状态下,集群状态配置分别如图1、2和3所示。 ...
2018-11-30 15:47:46 2084 1
原创 SO_REUSEADDR和SO_REUSEPORT选项
最近看redis源码,看到redis的网络模型,借机对socket编程和TCP/IP协议做了进一步的巩固和熟悉。其中对socket选项SO_REUSEADDR和SO_REUSEPORT写了一些demo,文章根据测试结果对SO_REUSEADDR选项和SO_REUSEPORT选项做一个总结,同时对博客的总结做一个纠正。 先来了解一下socket默认的行为: ·每个TCP连...
2018-06-29 12:17:58 4640 1
原创 redis的事件模型详解(结合Reactor设计模式)
文章基于redis-4.0.1源码详细介绍一下redis的事件模型。 一、redis事件模型概览 redis是一个事件驱动的服务程序,在redis的服务程序中存在两种类型的事件,分别是文件事件和时间事件。文件事件是对网络通信操作的统称,时间事件是redis中定时运行的任务或者是周期性的任务(目前redis中只有serverCron这一个周期性时间事件...
2018-05-11 10:20:11 5325 1
原创 内存映射mmap
内存映射是linux中的一个重要机制,它和虚拟内存管理和文件IO都有直接的关系,本篇将详细介绍linux中内存映射的原理。mmap基本概念 在介绍内存映射之前,首先知道现代计算机系统普遍采用虚拟内存的方式管理物理内存。在32位机器上每个进程都有自己的4G虚拟内存空间,其中0-3G属于用户空间,是该进程独有的;3-4G之间的是内核空间,是计算机中的所有进程的内核空间和内...
2018-04-29 09:47:13 1379 1
原创 逻辑地址、线性地址和物理地址之间的转换
首先说明一点,本篇的文章是根据自己的理解总结,但是图可能是在已有的博客中截图的,在此对那些对我理解该部分知识提供帮助的博客博主表示感谢! 在逻辑地址、线性地址和物理地址一节中,已经对逻辑地址、线性地址和物理地址的概念做了详细的讲解。现在在这篇文章中,我们可以详细的对段式、页式、段页式内存管理方式以及三种地址之间的转化做一个详细且深入的说明。 文章按照由简单到深...
2018-04-28 15:25:20 15188
原创 redis数据结构---dict
最近刚刚看过了redis源码的字典(dict)部分,结合《redis设计与实现》一书中的关于字典数据结构的介绍,写下自己对于redis中使用的字典数据结构的理解。如果有不正确的地方,欢迎各位及时指正。 dict是redis中关键的一种数据结构,数据库和哈希键的实现都依赖于dict结构。根据看过的资料,个人认为要掌握redis中的dict数据结构需要掌握以下几方面。 ...
2018-04-28 12:53:19 456
原创 redis内存限制管理---maxmemory配置详解
作为内存数据库,为了防止redis占用过多的内存对其他的应用程序造成影响,redis的使用者可以在redis.conf文件中通过设置maxmemory选项对redis所能够使用的最大内存做限制,并通过maxmemory_policy对redis占用内存超过maxmemory之后的行为做定制。这篇文章,我们从redis源码的角度剖析一下redis的最大内存管理策略。 ...
2018-04-28 11:42:26 52673 1
原创 redis数据结构---quicklist
quicklist是redis在3.2版本中加入的新的数据结构,用作redis对外提供的五种数据类型---list的底层实现。本文关于redis的讲解都是基于redis-4.0.1版本的源码。 黄建宏老师的《redis设计与实现》第二版是针对redis 3.0源码讲解的。书中讲redis的list数据结构的底层实现有两种,压缩列表(ziplist)和双向链表(adli...
2018-04-26 13:19:04 1063
原创 Mini transaction
Mini transaction的定义和划分 Mysql中所有的事务在innodb存储引擎内部都是通过mini transaction完成的,将一个事务划分成多个mini transaction的依据是:每条语句都作为一个mini transaction来执行。 虽然,innodb将事务划分成了多个mini transaction,但是mini transacti...
2018-11-15 20:11:38 1241
转载 Innodb中LSN(log sequence number)详解
本篇文章关于Innodb中的LSN的介绍摘自本篇博客。LSN称为日志的逻辑序列号(log sequence number),在innodb存储引擎中,lsn占用8个字节。LSN的值会随着日志的写入而逐渐增大。根据LSN,可以获取到几个有用的信息:1.数据页的版本信息。2.写入的日志总量,通过LSN开始号码和结束号码可以计算出写入的日志量。3.可知道检查点的位置。实际上还可以...
2018-10-29 18:07:51 14749 5
转载 浅谈TCP/IP网络编程中socket的行为
最近在学习redis源码,redis使用C/S模型,client和server之间涉及网络通信。在看redis的网络模块的时候,发现对于socket的行为有些不解,因此自己写了demo进行测试,并从网上看到一篇比较好的解释TCP/IP编程中socket行为的文章(个人认为浅显易懂,以下称之为博客1)。...
2018-06-29 15:07:14 292
转载 糊涂窗口综合症和Nagle算法
本篇文章转载自:http://www.cnblogs.com/zhaoyl/archive/2012/09/20/2695799.html,用于记录自己对于TCP网络中糊涂窗口综合症和Nagle算法的理解。 TCP/IP详解系列,关于tcp拥塞控制和数据流的地方讲的不细致,或许是涉及概念/算法太多,作者略去了一些对初学者来说比较陌生的细节吧。比如SWS未说明是什么就开始介绍其避...
2018-06-14 14:49:35 361
转载 到底该如何理解socket的阻塞/非阻塞/同步/异步
转载自:https://blog.csdn.net/voidccc/article/details/8619514这4个名词的解释网络上有很多种版本和很多种比喻,个人不太喜欢打比方的方式来理解技术问题,因为很难有贴切的比喻,稍不注意就把人带到沟里.我们这里只通过技术模型来理解这4个术语,忽略这些名词广义上的定义,通过分析下面这个具体的场景来分享下我对他们的理解:场景:假设要通过一个socket发送...
2018-05-11 18:53:07 309
原创 概念数据模型、逻辑数据模型、物理数据模型
最近在系统的学习数据库存储方面的知识加上在公司经常听同事们说起CDM,结合前段时间对MySQL的使用的心得将概念数据模型(Concept Data Model,CDM)、逻辑数据模型(Logical Data Model,LDM)、物理数据模型(Physical Data Model,PDM)做个简单的介绍。本文将介绍这三种模型的基本概念以及他们之间的不同。 在讨论三种数据模型之前,我们首先...
2018-04-30 10:11:33 20894
原创 逻辑数据模型之层次数据模型、网状数据模型和关系数据模型
上一篇文章简单介绍了概念数据模型、逻辑数据模型、物理数据模型的基本概念、特性以及三者所对应的数据库的开发阶段。现在针对逻辑数据模型中所用到的三种数据模型---层次数据模型、网状数据模型以及关系数据模型做一个相信的介绍与对比分析。 一、层次数据模型 定义:层次数据模型是用树状<层次>结构来表示实体类型和实体间联系的数据模型。(来自百度百科) 其实层次数据模型就是的图形表示就是一个倒...
2018-04-30 10:11:28 7921
原创 概念数据模型到逻辑数据模型的转化
前面的两篇博客分别介绍了概念数据模型、逻辑数据模型以及物理数据模型和逻辑数据模型经常使用的三种数据模型,这篇博客介绍在数据库的设计过程中将概念数据模型转化为逻辑数据模型的方法,以及涉及的一些基本的概念。本篇文章所介绍的主要是针对关系数据库中概念数据模型和逻辑数据模型之间的转换。 一、码 首先,说明一下数据库中经常用到的用于标示一条记录(元组)的的码的概念,码又分为超码、候选码、主码。 超...
2018-04-30 10:11:17 13886 1
原创 mongoDB学习记录---PHP扩展的find返回值
最近的一个项目中用到了MongoDB,主要是使用MongoDB的PHP扩展。MongoDB的扩展中用于一个用于查询的方法是find()。下面针对在理解MongoDB扩展的find()方法中做的实验做个简单的笔记,同时希望能够帮助别人。 MongoDB的PHP扩展中,可以使用MongoColletion的find($query,$fileds)进行查询,其中find()根据$que...
2018-04-29 09:49:21 933
原创 PHP中类自动加载的方式
最近在学习composer,发现从接触PHP到现在已经遇到了三种关于PHP中类的自动加载方式,这其中包括PHP自带的类的自动加载方式、PHP的第三方的依赖管理工具composer的加载方式以及PHP的Yaf框架下的自动加载方式。本篇博客主要是针对PHP5自带的加载方式进行详细介绍,composer和Yaf下类的自动加载将在接下来的时间里分两篇和大家一起学习。 1.手动加载方式 像C...
2018-04-29 09:49:09 352
原创 浅谈session/cookie
Session 和Cookie是常用的Web跟踪技术。Cookie保存在客户端,而Session则保存在服务器端,二者结合使用来跟踪用户的会话状态,是http协议的一种扩展技术。之所以说是一种扩展技术,是由于Session和cookie是作为http协议的一种补充,用于弥补http协议的无状态特性而引入的,从而保持用户与服务器之间的状态信息。1. Cookie机制1.1 Cookie的...
2018-04-29 09:48:54 304
原创 Composer实现PHP中类的自动加载
本篇博客承接上一篇,学习一下Composer实现的PHP的类的自动加载方式。首先说明一下,Composer是PHP针对PHP语言的第三方的依赖管理工具,将工程所用到的依赖文件包含在composer.json文件中,使用composer install命令就可以将所使用对应库或者文件加载进工程里面。下面分两部分介绍composer的基础,分别是composer的依赖管理和自动加载。 依赖管理 ...
2018-04-29 09:48:45 1122
原创 Yaf框架下类的自动加载
前面两篇博客分别讲述了PHP自带的类加载和composer中类的自动加载,其实Yaf框架也实现了基于PSR0和PSR4的类的自动加载。根据我对Yaf下类的自动加载方式的理解写下这篇博客。由于接触Yaf框架时间不长,因此如果有不对之处,还望大家不吝指教。 要理解Yaf框架下类的自动加载方式,还是需要PSR0和PSR4规范作为基础,对于PSR0和PSR4的具体规范,本文不做详细解释。Ya...
2018-04-29 09:48:30 3712
原创 关于C中struct和union长度的详解
这几天看《代码大全》中的第十三章---不常见的数据类型,里面讲解到了C语言中的struct以及对指针的解释,联想到以前看过相关的关于C语言中stuct长度的文章,只是现在有些淡忘了,因此今天把保存的资料重新拿出来温习一遍,同时写下这篇文章,对以前相关资料总结的同时顺便梳理一下已有的知识。一、基本数据类型在内存中的长度 关于基本的数据类型,在不同的机器上占据的长度不一样。为了能够对数据的组合类...
2018-04-29 09:48:19 3490
原创 CGI、FastCGI和PHP-FPM浅析
这段时间对Nginx+PHP-FPM的概念和机制一直不太清晰,趁着同事的分享和看过的几篇博文和资料,重新将思路处理一下。 首先,PHP-FPM(FastCGI Process Manager: FastCGI进程管理器)是一种针对PHP的FastCGI,针对PHP语言的一种进程管理器。FastCGI顾名思义就是一种快速的CGI(Common Gateway Interface)。因此为了能够...
2018-04-29 09:47:58 268
原创 linux系统下的软连接与硬链接
前几天在linux系统下安装mongoDB,然后运行脚本导入数据的时候遇到了链接库查询不到的情况,如图 1所示。当时是通过创建软连接的方式解决的这个问题。虽然,通过网上的教程解决了这个问题,但是对于软连接和硬链接始终不是很明白。趁着周末的时间补补课,将软连接和硬链接的概念、特点以及创建的限制系统的学习一下。图 1 缺少文件的提示 Linux下的连接文件分为两种,一种是类似于windows的快...
2018-04-29 09:47:40 520
原创 进程间通信---管道
虽然看过APUE这本书,但是还是实践出真知。虽然看过相关的内容,但是只是停留在理论的层面,今天遇到的问题还是在大牛的提示下了解了原因所在---进程之间的管道通信导致进程阻塞。 问题是这样的,使用资源管理器rigger -ng启动nginx的过程中,卡在nginx的语法校验一步而无法再继续向下进行,导致nginx无法启动。一开始我和同事折腾半天以为是nginx的配置问题,后来才发现是进程之间的...
2018-04-29 09:47:27 294
原创 linux中的页缓存和文件IO
虽然仔细看过《linux内核设计与实现》,也参考了很多的博客,并且做了linux进程空间、address_space和文件的关系图(设为图1,参考博客),但是对于页缓存和文件IO之间关系的细节一直不是特别明朗。趁着元旦假期看的博客中思路还算清晰,写下当前对于页缓存的理解及其和文件IO之间的关系。 首先明确的一点是,本文所述的是针对linux引入了虚拟内存管理机制以后所...
2018-04-28 16:37:47 10894 2
原创 基数树结构---radix_tree
最近在学习linux中内存管理相关的章节,其中页缓存相关的结构体中遇到了成员数据结构radix_tree_root和radix_tree_node,由于以前没有遇见过这两种数据结构,因此在此处针对这两种数据结构在linux内核的内存管理中的应用做一个简要的记录。一、概述 linux radix树最广泛的用途是用于linux的 内存管理,结构address_space通...
2018-04-28 16:09:54 4940 1
原创 linux文件体系结构和虚拟文件系统
linux中的虚拟文件系统(Virtual File System, VFS)是一种采用面向对象编程策略(尽管书写操作系统的C语言本身不支持面向对象编程,但是思想还是可以借鉴的),是对该操作系统所支持的所有实际物理文件系统的一种抽象,用于提供给用户进程或者系统调用操作当前系统中所有文件统一的接口,而不用关心当前操作系统中存在哪几种实际的物理文件系统。也可以这么说VFS实际提供了面向...
2018-04-28 15:59:05 2058
原创 linux进程空间、页缓存和虚拟文件系统图
linux内核与实现中分别大致介绍了内核子系统的各个模块,并给出了该模块下重要的数据结构。但是,阅读过本书之后(感觉底层确实欠缺)发现只是对各个子系统分别有了一个大致的印象,单凭自己的理解难以将各个系统之间串联起来,尤其是每个内核子系统总是涉及较多的数据结构。趁着即将元旦假期,花点时间将内核中的虚拟文件系统、进程地址空间、页缓存以及内存映射之间的关系建立一个大致的框图。有关于各个子...
2018-04-28 14:55:54 1459 2
原创 redis数据结构---intset
这两天看过《redis设计与实现》中的intset一章,配合着redis 4.0.1中的源码,感觉自己对redis中的intset有了新的认识。在这里写下自己对于intset的理解,以及redis源码中的实现技巧。 intset作为redis中集合的底层实现之一,当集合中的元素数量不太多且都是整数值的时候,set使用intset作为其底层实现。个人认为,redis中i...
2018-04-28 14:52:29 357
原创 redis数据结构---zskiplist
复习《redis设计与实现》,跳跃表是在看《redsi设计与实现》的时候第一次接触到的概念,因此认真研究了一下跳跃表的性质以及redis源码中针对跳跃表的实现。下面对redis源码中关于跳跃表的实现配合源码做详解的解释(注释都包含在源码中)。至于跳跃表的性质及查找的复杂度(平均为O(log(N))、最差为O(N)),自行google,相关文章非常之多。本篇文章只记录当时自己花费时间...
2018-04-28 14:45:36 1226
原创 redis数据结构---sds
看过了《redis设计与实现》,了解了redis设计的基本原理。但是三个月之后发现,遗忘了很多,只好重新温习。只是,这次是从redis源码的角度学习的,当然过程中会翻阅《redis设计与实现》这本书,毕竟需要一个框架指导。按照redis源码的阅读顺序,按照从基本到复杂、从redis使用的基本数据结构开始。本文就介绍redis中使用的最常见的数据结构之一---sds(simple d...
2018-04-28 12:03:29 1425 1
原创 redis数据结构---ziplist
最近两天仔细研究了redis中的ziplist数据结构,再回顾之前写过的关于dict和zskiplist数据结构的博客文章,发现对于实现代码的细节竟然有些遗忘,看来及时的复习还是很有必要的。这是前话。 其实,仔细看过redis中使用的几种数据结构,就会发现redis这种内存数据库对于内存的节约程度真的是到了淋漓尽致的地步。之前看过的sds中的sdshdr中根据需...
2018-04-27 15:23:06 643
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人