memcache 的 安装 以及 存储规则

安装:

 下载安装包:

memcached-1.4.8.tar.gz(最新)

libevent-1.4.9-stable.tar.gz(socket通信程序,它是memcached 所依赖的异步事件通知库) 

上述包都是用c写的。故在linux环境下安装,linux必须有c编译环境,目前都用gcc(最好系统自带,否则自己安装非常麻烦,特别耗时

间)

 命令tar –xzf  libevent-1.4.9-stable.tar.gz 

cd libevent-1.4.9-stable.tar.gz 

./configure –prefix=/usr 

make 

make install 

=============libevent 

安装完毕

==================== 

 tar –xzf  memcached-1.4.8.tar.gz 

cd memcached-1.4.8.tar.gz 

./configure –prefix=/usr 

make 

make install 

=============memcache

安装完毕

================== 

Memcache 已经安装到usr/bin目录下 

启动

/usr/bin memcached –d –m 128 –l  10.10.31.79  –p 11211  -u root  -d  以守护(daemon)程序方式运行

memcached 

-l 设置监听的ip地址,如果是本机,通常不设置

 -p 设置监听端口,默认为11211 通常不设置

 -m 设置内存大小单位M 

-u 指定用户。当前用户为root时,可以指定用户。(不能以root用户权限启动)

-vv 用very vrebose模式启动,调试信息和错误输出到控制台

还有很多命令可以用memcached –h 来查看测试telnet server port 这里,我用的SecureCRT ,当然还有很多客户端工具,如PuTTy;Window 自带的cmd中的telnet 也可以,但是容易出现乱码问题,得设置编码格式。

 

介绍

Memcache使用了Slab Allocator的内存分配机制:按照预先规定的大小,将分配的内存分割成特定长度的块,以

完全解决内存碎片问题

Memcache的存储涉及到slabpagechunk三个概念

1Chunk为固定大小的内存空间,默认为96Byte

2page对应实际的物理空间,1page1M

3.同样大小的chunk又称为slab

Memcached再启动的时候根据-n-f参数,产生若干slab。具体应用中Memcache每次申请1page,并将这1M空间分割成若干个chunk,这些chunk有着同样的大小,属于同一个slab

【添加】,通过memcache添加item的时候:

1  Memcache计算item的大小(key+value+flags,选取合适的slab(刚好能放下该itemslab

2  如果这个item对应的slab未出现过,则申请1page(注意,这1M空间不论是否达到memcached使用内存都可以申请成功)并加该item存入slab中的chunk

3  如果item对应的slab出现过,则在该slab中优先选择expiredfree_chunks)和delete(在1.2.2deletechunk存在着不能被重复利用的问题)的chunk进行存储,其次将选择未使用过的chunkfree_chunks_end)进行存储。

4  如果item对应的slab出现过,但是对应的slab已经存储满了,那么会申请一个新的page,这个page被分为对应大小的chunk,继续存储。

5  如果item对应的slab出现过,但是对应的slab已经存储满了并且memcache也达到了最大内存使用。将使用lru算法,清除item(可能将未过期的item清除)此时会有eviction++

【删除】:

1  Delete操作只是将该chunk置为删除状态,这样在下次使用将优先利用这样的chunk

flush

1  Flush操作相当于将所有的item失效的一个动作。并不会改变memcache内存分配情况。

一些注意

1. memcache已经分配的内存不会再主动清理。

2. memcache分配给某个slab的内存页不能再分配给其他slab

3. flush_all不能重置memcache分配内存页的格局,只是给所有的item置为过期。

4. memcache最大存储的item(key+value)大小限制为1M,这由page大小1M限制

5.由于memcache的分布式是客户端程序通过hash算法得到的key取模来实现,不同的语言可能会采用不同的hash算法,同样的客户端程序也有可能使用相异的方法,因此在多语言、多模块共用同一组memcached服务时,一定要注意在客户端选择相同的hash算法

6.启动memcached时可以通过-M参数禁止LRU替换,在内存用尽时addset会返回失败

7memcached启动时指定的是数据存储量,没有包括本身占用的内存、以及为了保存数据而设置的管理空间。因此它占用的内存量会多于启动时指定的内存分配量,这点需要注意。

8memcache存储的时候对key的长度有限制,phpC的最大长度都是250

posted on 2013-05-22 10:19  shires  阅读(317)  评论(0编辑  收藏  举报