首页 > 代码库 > 浅谈Memcached服务器的简单属性
浅谈Memcached服务器的简单属性
Memcached的内存算法:
1. 传统的内存管理方式是,使用完通过malloc分配的内存后通过free来回收内存,这种方式容易产生内存碎片并降低操作系统对内存的管理效率。
2. Memcached利用slab allocation机制来分配和管理内存,它按照预先规定的大小,将分配的内存分割成特定长度的内存块,再把尺寸相同的内存块分成组,数据在存放时,根据键值大小去匹配slab大小,找就近的slab存放,也存在空间浪费现象。
Memcached服务器的缓存:
1. Memcached的缓存策略是LRU(最近最少使用)加上到期失效策略,分配给memcached内存空间用完之后,失效数据首先被替换,然后再替换掉最近未使用的数据。(在LRU算法中,memcached使用的是一种Lazy Expiration策略,自己不会监控存入的key/vlue对是否过期,而是在获取key值时查看记录的时间戳,检查key/value对空间是否过期,这样可减轻服务器的负载。)
2. 当你在memcached内存储数据项时,你有可能会指定它在缓存的失效时间,默认为永久。
3. 所有数据都保存在内存中,存取数据比硬盘快,当内存满后,通过LRU算法自动删除不使用的缓存,但没有考虑数据的容灾问题。
4. 重启memcached服务,重启memcached服务所在的机器,所有数据会消失
5. 客户端通过delete / flush 销毁内存数据
Memcached的分布式算法:
1. 各个memcached服务器之间互不通信,各自独立存取数据,不共享任何信息。服务器并不具有分布式功能,分布式部署取决于memcache客户端。当向memcached集群存入/取出key/value时,memcached客户端程序根据一定的算法计算存入哪台服务器,然后再把key/value值存到此服务器中。也就是说,存取数据分二步走,第一步,选择服务器,第二步存取数据。
2. 选择服务器算法有两种,一种是根据余数来计算分布,另一种是根据散列算法来计算分布。
2.1 余数计算:先求得键的整数散列值,再除以服务器台数,根据余数确定存取服务器,这种方法计算简单,高效,但在memcached服务器增加或减少时,几乎所有的缓存都会失效。
2.2 散列算法:先算出memcached服务器的散列值,并将其分布到0到2的32次方的圆上,然后用同样的方法算出存储数据的键的散列值并映射至圆上,最后从数据映射到的位置开始顺时针查找,将数据保存到查找到的第一个服务器上,如果超过2的32次方,依然找不到服务器,就将数据保存到第一台memcached服务器上。如果添加了一台memcached服务器,只在圆上增加服务器的逆时针方向的第一台服务器上的键会受到影响。
启动说明:memcached –p 11211 –d –u root –P /tmp/memcached.pid
-P 是表示使用TCP,默认端口为11211
-d 表示后台启动一个守护进程(daemon)
-u 表示指定root用户启动,默认不能用root用户启动
-P 表示进程的pid存放地点,此处“p”为大写“P”
-l 后面跟IP地址,手工指定监听IP地址,默认所有IP都在监听
-m 后面跟分配内存大小,以MB为单位,默认为64M
-c 最大运行并发连接数,默认为1024
-f 块大小增长因子,默认是1.25
-M 内存耗尽时返回错误,而不是删除项,即不用LRU算法
了解memcache在服务器上运行的原理,在研发是可以规避掉一些简单的错误,比如如何设计多memcache,何如提取键值数据,数据的生命周期等。
浅谈Memcached服务器的简单属性