协议简单php
基于 libevent 的事件处理git
内置内存存储方式github
memcached 不互相通讯的分布式缓存
依赖服务器
$ wget 下载地址 $ tar zxf memcached-版本号.tar.gz $ cd memcached-版本号.tar.gz $ ./configure $ make $ sudo make install
启动命令 $ /usr/local/bin/memcached -p 11211 m 64m -dtcp
-d 后台运行 -m 运行的最大内存大小 -p 使用 tcp 端口默认为11211 -vv very verbose分布式
add replace setmemcached
add函数
replace工具
set
get
get_multi 获取多个数据
delete
第二个参数表明延迟删除的时间。
删除第一个参数指定的键的数据。第二个参数指定一个时间值,能够禁止使用一样的键保存新数据。
set 函数会忽视这个时间
原子操做
不会自动赋值
不会对
Slab Allocator
分配的内存不会释放
术语
page 分配给 Slab 的内存空间,默认是 1MB。 分配给 Slab 以后根据 slab 的大小切分红 chunk。
chunk 用于缓存记录的内存空间。
slab class 特定大小的 chunk 的组。
memcached 如何选择 slab memcached 根据收到的数据的大小,选择最适合数据大小的 slab(图 2.2)。
memcached 中保存着 slab 内空闲 chunk 的列表,根据该列表选择 chunk,而后将数据缓存于其中。
减小内存碎片
缺点
Growth Factor
控制 slab 之间的差别,默认值为1.25 即 slab2 是 slab1 的 chunk 大小的 1.25 倍
在以前 slab 的默认值是2
telnet 主机名 端口号
memcached-tool 10.0.0.5:11211 display # shows slabs
memcached-tool 10.0.0.5:11211 # same. (default is display) memcached-tool 10.0.0.5:11211 stats # shows general stats memcached-tool 10.0.0.5:11211 settings # shows settings stats memcached-tool 10.0.0.5:11211 sizes # shows sizes stats memcached-tool 10.0.0.5:11211 dump [limit] # dumps keys and values
pecl 的 memcached.php
memAdmin 后台 https://github.com/junstor/memadmin
不会释放已分配的内存
lazy expiration memcached 内部不会监视记录是否过时,而是在 get 时查看记录的时间戳,检查记录是否过时。
memcached 不会在过时监视上耗费 CPU 时间。
memcached 的分布式彻底依赖客户端的实现
Consistent Hashing 以下所示:
首先求出 memcached 服务器(节点)的哈希值,并将其配置到 0~2 32 的圆(continuum)上。而后用一样的方法求出存储数据的键的哈希值,并映射到圆上。而后从数 据映射到的位置开始顺时针查找,将数据保存到找到的第一个服务器上。若是超过 2 32 仍然找不到 服务器,就会保存到第一台 memcached 服务器上。
php 库: libketama