什么是Memcache?
Free & open source, high-performance, distributed memory object caching system, generic in nature, but intended for use in speeding up dynamic web applications by alleviating database load.
Memcached is an in-memory key-value store for small chunks of arbitrary data (strings, objects) from results of database calls, API calls, or page rendering.
Memcache是一个高性能的分布式的内存对象缓存系统,通过在内存里维护一个统一的巨大的hash表,它能够用来存储各种格式的数据,包括图像、视频、文件以及数据库检索的结果等。
Memcache官方网站http://memcached.org/。
使用libevent进行网络IO处理,libevent作为一种新的非阻塞网络IO方式以高效的方法(epoll/kqueue)组织IO,分布式散列对象到不同的服务器,查询复杂度是O(1)。
目前被广泛应用在facebook、wikipedia、和sourceforge等大型网站。
memcache的Server结点对数据的存储操作都是在内存中完成,对内存分配和回收采用了曾在SunOS实现的分页机制,预分配一个大内存(默认是 <= 200M),然后分页切块:将1M的内存片(slab)根据需要截取成若干种不同大小的内存块(chunk)来进行使用,共有80、100、128、160、...1M这数十种大小不同的内存块(可以设置最小的块大小),默认按照125%递增(可以设置递增比例),对每个数据对象的存储便在所切的块中进行操作,没有涉及到任何磁盘IO操作,绝对不会使用到SWAP虚拟内存,其性能瓶颈都在网络通信部分,而memcache正是将这一部分抛给了一个中间层完成。可以说memcached是一个单进程、单线程、监听某个网络端口的daemon(或非daemon),是一个轻量级的应用服务进程
存放在内存的数据通过LRU算法进行淘汰出内存,同时可以通过删除和设置失效时间来淘汰存放在内存的数据。