Memcached
Memcached
CleverCode
这个作者很懒,什么都没留下…
展开
-
memcache 的过期数据删除机制?
1.stats 命令可以查看 memcache 的当前状态,一共存过多少记录 total_item,以及当前有效的记录 curr_items,当有些记录失效的时候, 会发现 curr_items 并没有减少,而 在下一次 get 这条记录的时候,curr_items 会减少,这说明某个值过 期的时候,.如果之前没有 get 过,他并没有真正的从内存删除。当 取某个值的时候,判断是否过期,...原创 2018-08-16 15:38:01 · 1014 阅读 · 0 评论 -
libevent源码分析
1 libevent简介libevent是一个事件通知库,适用于windows、linux、bsd等多种平台,内部使用select、epoll、kqueue、IOCP等系统调用管理事件机制。著名分布式缓存软件memcached也是基于libevent,而且libevent在使用上可以做到跨平台,而且根据libevent官方网站上公布的数据统计,似乎也有着非凡的性能。2 工作原理3 源码分析...原创 2018-09-23 18:33:27 · 1373 阅读 · 0 评论 -
Memcached源码分析-网络模型(1)
1 网络模型Memcached采用了,单进程多线程的工作方式,同时采用了libevent事件驱动进行网络请求的处理。2 工作原理2.1 libevent介绍libevent是一个事件驱动库,详细的工作原理,请看我的另外一篇博客的介绍,《libevent源码分析》:https://blog.csdn.net/CleverCode/article/details/828215482.2 网络...原创 2018-09-25 18:27:31 · 326 阅读 · 0 评论 -
Memcached源码分析-网络请求状态机(2)
1 状态机流转图2 流程说明工作流程说明:1 当主线程调用dispatch_conn_new的时候,worker线程创建conn对象,初始状态为conn_new_cmd。2 当监听的socket触发事件后。3 进入conn_new_cmd状态:会调用reset_cmd_handler()。如果是第一次事件触发状态会进入到conn_waiting。如果读缓存区中有数据,会进入conn_p...原创 2018-09-27 17:18:04 · 342 阅读 · 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_cmd状态,调用try_read_command()方法3 当前指针char *rcurr = rbu...原创 2018-09-27 18:34:34 · 297 阅读 · 0 评论 -
Memcached源码分析-HashTable(4)
1 原理图2 说明:Memcached在启动的时候,会默认初始化一个HashTable,这个table的默认长度为65536。我们将这个HashTable中的每一个元素称为桶,每个桶就是一个item结构的单向链表。Memcached会将key值hash成一个变量名称为hv的uint32_t类型的值。通过hv与桶的个数之间的按位与计算,hv & hashmask(hashpow...原创 2018-09-29 15:25:43 · 292 阅读 · 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结构体重,会有size属性指定这个结构体能够存储item的大小,开始的时候是80B,然后以1.25的增加。3 ...原创 2018-09-29 15:48:02 · 375 阅读 · 0 评论 -
Memcached源码分析- LRU原理以及get/set命令(6)
1 原理图2 LRU原理每一个slabclass都会对应一个heads指针指向item链表的头部,tails指向items链表的尾部。组成一个LRU链表,链表是按照访问时间顺序排列的。1 get请求命令1 通过hv = hash(key, nkey),通过hash函数计算出key的32位整数值。2 通过索引数组,it = primary_hashtable[hv & hashm...原创 2018-09-29 16:25:03 · 477 阅读 · 0 评论