Memcached 缓存服务器介绍
1、memcached 高性能分布式内存对象缓存系统
2、目的:减轻数据库负载,提高基于动态数据库驱动网站的响应速度
3、数据格式:文本行
4、协议:memcache协议
5、存储方式:hashMap
6、缺点:重启memcache服务器后,存储的数据会消失。在数据持久化方面有所欠缺
7、内存分配机制:最初的版本就是采用mollc和free来获取内存,释放内存,这样会造成很多内存碎片
最新的一般是采用slab allonation内存分配机制,首要目标就是防止出现很多内存碎片。
8、slab allonation 首先是一大块memcache的内存(默认是1M),这块内存被切分成很多chunk(这些chunk 大小可能相等,也可能不等);然后将大小相等的chunk分成一个组(slab allonation)。这些chunk是可以重复利用的。
9、slab存储原理:接收到客户端数据后,根据数据大小,选择合适的chunk,然后将数据存在里面。(memcached里面有一个列表,记录着哪些chunk是使用过的,哪些是未使用的)
10、slab存储机制的缺点:可能会造成内存浪费,如:将100KB的数据存储在128KB的chunk中
11、memcached调优,调节chunk的大小,使其接近于实际存储数据的大小;在memcachaed启动时,指定增长因子。默认为2,可以改为1.25或其他值。$memcached -f 2 vv(是两个v不是w)
12、进入memcached后,通过status查看memcached的各种状态信息!
13、memcached删除数据的原理:memcached不会时时监视数据是否过期,而是在get数据的时候,校验数据是否过期。如果过期后,记录不会被删除,但是不可以被客户端看见,其内存空间可以重复使用。(这种方式成为 惰性期满 lazy expiration)
14、默认情况下,当memcached数据存储满后,新来数据需要插入时,就会根据最近最少使用原则(LRU lasted recently used),覆盖原先的数据;启动memcached时,通过以下参数 -M -m 1024禁用LRU原则,这时候如果存储空间满,就会报错。1024指的是memcached的最大内存,默认是64M;
15、memcached的键大小最大是250个字节,可以考虑基于二进制协议实现更大键 2的16次方个字节;
16、memcached的一个发展新方向就是支持外部引擎扩展,实现数据的持久化。
17、memcached服务器端并没有实现分布式功能,memcached的分布式是通过客户端实现的;这种分布式是memcached的最大特点。
eg:假如有三个或者更多个memcached服务器,当应用程序set一个值时,首先会到memcached客户端,客户端会根据键来选择存储在哪个服务器上,当取值的时候,会使用相同的算法,计算该键值对会存储在哪个服务器上,然后到该服务器上取值。
选择服务器算法1:根据键的哈希值,除以服务器的台数,根据余数选择服务器。缺点:当添加或删除服务器后,使用此算法就不能获取原先保存的数据。
选择服务器算法2:consistent hashvalue算法,讲一个圆顺时针,等间距标注,0~2^32;计算出每台服务器的hash值,放到圆对应的位置上。然后计算每个key的hash值,放到圆上,顺时针找到第一个memcache服务器。这样增加一台服务器,影响的仅仅是这台服务器和其逆时针服务器之间的键值对。
18、memcached服务器几乎不占用CPU
19、memcached启动时分配的内存,是slab分配器存储数据所用内存,slab本身运行也需要内存,假如一台机器4G内存,建议分配内存不超过3G,否则可能发生内存交换。
20、memcached与memcache的区别:服务器端都是一样的称作memcached进程,客户端不同,客户端有两个库 一个是memcache另一个是memcached; memcached是一个比较新的库,建议使用;memcache已经好久不更新了。很多语言操作memcached服务器都是通过封装这两个库完成的。