CleverCode的博客

CleverCode是一名PHP工程师,他只想把自己一点点的智慧分享给大家!

Memcached源码分析- LRU原理以及get/set命令(6)

1 原理图 2 LRU原理 每一个slabclass都会对应一个heads指针指向item链表的头部,tails指向items链表的尾部。组成一个LRU链表,链表是按照访问时间顺序排列的。 1 get请求命令 1 通过hv = hash(key, nkey),通过hash函数计算出key的32位...

2018-09-29 16:25:03

阅读数 65

评论数 0

Memcached源码分析-slab内存分配(5)

1 工作原理图 2 流程说明 1 工作原理 1 memcached启动的时候会初始化一个slabclass_t slabclass[MAX_NUMBER_OF_SLAB_CLASSES]数组,MAX_NUMBER_OF_SLAB_CLASSES的值是200。 2 每个slabclass结构体重,...

2018-09-29 15:48:02

阅读数 90

评论数 0

Memcached源码分析-HashTable(4)

1 原理图 2 说明: Memcached在启动的时候,会默认初始化一个HashTable,这个table的默认长度为65536。 我们将这个HashTable中的每一个元素称为桶,每个桶就是一个item结构的单向链表。 Memcached会将key值hash成一个变量名称为hv的...

2018-09-29 15:25:43

阅读数 68

评论数 0

Memcached源码分析-命令解析(3)

#1 流程图 2 流程说明 1 当进入到conn_read状态后,会调用try_read_network(),将socket数据读取到conn的rbuf中。 例如:char *rbuf = ‘set key 0 0 4\r\nget name\r\n’。 2 然后进入到conn_parse_c...

2018-09-27 18:34:34

阅读数 73

评论数 0

Memcached源码分析-网络请求状态机(2)

1 状态机流转图 2 流程说明 工作流程说明: 1 当主线程调用dispatch_conn_new的时候,worker线程创建conn对象,初始状态为conn_new_cmd。 2 当监听的socket触发事件后。 3 进入conn_new_cmd状态:会调用reset_cmd_ha...

2018-09-27 17:18:04

阅读数 84

评论数 0

Memcached源码分析-网络模型(1)

1 网络模型 Memcached采用了,单进程多线程的工作方式,同时采用了libevent事件驱动进行网络请求的处理。 2 工作原理 2.1 libevent介绍 libevent是一个事件驱动库,详细的工作原理,请看我的另外一篇博客的介绍,《libevent源码分析》:https://b...

2018-09-25 18:27:31

阅读数 49

评论数 0

libevent源码分析

1 libevent简介 libevent是一个事件通知库,适用于windows、linux、bsd等多种平台,内部使用select、epoll、kqueue、IOCP等系统调用管理事件机制。著名分布式缓存软件memcached也是基于libevent,而且libevent在使用上可以做到跨平台...

2018-09-23 18:33:27

阅读数 327

评论数 0

PHP延迟静态绑定

1 self用法 self是指向定义它的当前类的指针。当前类(current class) <?php class Person {/*{{{*/ static $name = 'i am person' ; //打印信息 public st...

2018-09-12 18:25:01

阅读数 111

评论数 0

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