Memcached概述

说明:以往阅读源码,总是想把每个文件、每行代码搞清楚,甚至不放过宏定义。个人认为这是“捡了芝麻,丢了西瓜”。阅读源代码,学习其设计方法和思想,了解设计思路是主要的;而不是通过阅读源代码学习语言用法,能学习固然好,但是在精力有限时,要把精力主要放在阅读代码的初衷上。


在阅读源码之前,先对Memcached的工作流程做了解,这样阅读起来事半功倍。

Memcached使用Libevent,以此为基础来处理事件。其原理为:启动时的线程为main thread,它包含一个event_base,之后创建多个work thread;每个work thread中也有一个event_base。main thread中的event_base负责监听网络,接收新连接;当建立连接后就把新连接交给work thread来处理。




Memcached是基于key-value来存储数据的。数据全部放在内存,因此重启后数据会全部消失。基于key-value存储,用的是map;确切说是hashmap,以内存来换取高效率。


Memcached有自己的内存管理机制。内存分配方面,使用了SLAB机制,避免了频繁使用malloc/free带来的内存碎片问题。SLAB机制在Linux也有用到,其原理为:先分配一个大的内存块,之后把这个大内存块分成更小的内存单元;当需要使用内存时,就去对应的单元去取,使用完后归还(不是释放)。这样就可以避免动态开始和释放内存造成内存碎片问题。可以参考https://en.wikipedia.org/wiki/Slab_allocation。

在Memcached中的实现为:先分配大小为1M的slab,然后在把这个1M的slab分割为更小的chunk,大小相同的chunk的组成一个集合(slab),当需要分配内存时,向上取整(增加大小,找到合适大小的chunk)找到对应的chunk,从这个chunk取走内存,使用完后归还给这个chunk。


使用LRU机制,淘汰长期不用的Item。LRU全称为Least Recently Used(最近最少使用),意思为将最近最少使用的Item释放,用来加载其他Item。


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值