先简单说下内存数据库,及系统上可用来保存数据。那么,内存的缓存操作需要一个中间件,其次内存容易丢失啊!优点就是非常快,缺点就是有限的内存,但memcached提供高性能的分布式内存缓存服务,组成一个想多大就多大的内存池。
memcached 服务端与客服端的通信协议是用的基于文本的ASCII和二进制两种协议,这样调试和开发,so easy。
memcached 是基于libevent库(一个非阻塞式的网络程序开发的,是一个事件触发的程序库,把Linux的epoll,kqueue等事件处理功能封装成统一的接口,即使并发数非常大,也能保持快速响应)。
1. memcached的内存存储处理
memcached采用自己的内存存储处理,首先按照预先规定的大小,将内存分割成各种尺寸的块(chunk),并把尺寸相同的块分成组 (chunk group),从而解决内存碎片问题。
memcached根据收到的数据大小,选择最适合数据大小的slab。memcached中保存着slab内空闲chunk的列表,根据该列表选择chunk,然后将数据缓存于其中。
由于分配都是固定长度的内存块,因此无法有效利用分配的内存空间,比如将100字节的数据组存放在能放128字节的chunk中,余下28字节是浪费的
2.memcached的数据处理算法
LRU(Least Recently Used , 删除最近最少是用的) 和 Lazy Expiration
3.memcached客户端分布式结构与算法
无论PHP还是JAVA、.NET,每种语言实现的客户端库都会包含至少一种分布式算法来实现memcached的分布式。
笼统的来说客户端库是通过一个分布式算法和一个维护服务器列表来实现memcached的分布式。关于分布式算法目前有两种选择:取模算法(modula hashing)和一致性。,此处不多介绍。
4.memcached的技术限制
memcached还包括一些技术限制,如下
◆ 在memcached中可以保存的item数据量是没有限制的,只要内存足够。
◆ memcached单进程最大使用内存为2G,要使用更多内存,可以分多个端口开启多 个 memcached进程
◆ 最大30天的数据过期时间,设置为永久的也会在这个时间过期,由常REALTIME_MAXDELTA 60*60*24*30控制
◆ 最大健长为250字节,大于该长度无法存储,由常量KEY_MAX_LENGTH 250控制
◆ 单个item最大数据是1MB,超过IMB数据不予存储,由常量POWER_BLOCK(1048576进行控制,它是默认的s lab的大小
◆ 最大同时连接数是200,通过conn_init()函数中的freetotal进行控制,最大软接数是1024,通过settings.maxconns=1024控制
◆ 空间占用相关的参数settings.factor=1.25,setting.chunk_size = 48,影响slab的数据占用和进步方式
5.两个memcached扩展
在PHP的pecl站点,有两个实现功能类似的memcached Ap1绍时,它们分别是 memcache(http://pecl.php.net/package/memcache) 和 memcached (http://pecl.php.net/package/memcached).
这两个扩展库和memcached的名字非常相近,而且功能于伯仲之间。
按时间追溯,memcache在2004年9月就已经推出,在很多Linux系统中标准配置,也就是原生版本,而memcached扩展却是在2009年1月才发布。memcached扩展比较新,几乎支持memcaced的所有特性,但必须依赖libmemcached库才能运行。
如果不使用Delayed Get这样的特性,有不想多依赖libmemcached库,完全可以使用memcache。
6.memcached的安装
网上太多了,自行百度参考