05memcached的内存管理与删除机制分布式系统笔记Word格式.docx

上传人:b****6 文档编号:8657739 上传时间:2023-05-12 格式:DOCX 页数:10 大小:485.56KB
下载 相关 举报
05memcached的内存管理与删除机制分布式系统笔记Word格式.docx_第1页
第1页 / 共10页
05memcached的内存管理与删除机制分布式系统笔记Word格式.docx_第2页
第2页 / 共10页
05memcached的内存管理与删除机制分布式系统笔记Word格式.docx_第3页
第3页 / 共10页
05memcached的内存管理与删除机制分布式系统笔记Word格式.docx_第4页
第4页 / 共10页
05memcached的内存管理与删除机制分布式系统笔记Word格式.docx_第5页
第5页 / 共10页
05memcached的内存管理与删除机制分布式系统笔记Word格式.docx_第6页
第6页 / 共10页
05memcached的内存管理与删除机制分布式系统笔记Word格式.docx_第7页
第7页 / 共10页
05memcached的内存管理与删除机制分布式系统笔记Word格式.docx_第8页
第8页 / 共10页
05memcached的内存管理与删除机制分布式系统笔记Word格式.docx_第9页
第9页 / 共10页
05memcached的内存管理与删除机制分布式系统笔记Word格式.docx_第10页
第10页 / 共10页
亲,该文档总共10页,全部预览完了,如果喜欢就下载吧!
下载资源
资源描述

05memcached的内存管理与删除机制分布式系统笔记Word格式.docx

《05memcached的内存管理与删除机制分布式系统笔记Word格式.docx》由会员分享,可在线阅读,更多相关《05memcached的内存管理与删除机制分布式系统笔记Word格式.docx(10页珍藏版)》请在冰点文库上搜索。

05memcached的内存管理与删除机制分布式系统笔记Word格式.docx

最小的单元叫做chunk(小块):

存放数据的仓库

多个小单元组成一个chunks:

多个小块组成(所有的小块的大小全部一致)

每个slabclass的大小为1M

单个chunk最大只能为1M,也就是memcache的value值最大为1M

3.memcache如何选择合适的大小?

如果122Bytes的slab装满了,现在有一个100Bytes的数据来了,存到哪里去?

答:

肯定不会存在144,还是存在122这个chunk里面,利用LRU算法来实现数据存储。

LRU算法:

最近最少使用原则。

最近一段时间来,哪一个数据基本完成没有被使用过,则就清除掉这个数据。

然后让新数据放到里面。

但是,固定chunk带来的内存浪费,如下22B

4.factor调优

memcached在启动的时候,会按照一定的大小来组织slabclass,可以通过-f来指定

默认是1.3,相邻chunk之间的比值就是增加因子。

可以根据自己网站的业务调整缓存因子的大小。

是因为每个业务不一样,所需要的最小的chunk是不一样的。

这个参数使得我们的系统变得更加适应自己的业务,因为数据可以自己设定大小。

5.memcache的惰性删除

memcached内部不会监视记录是否过期,而是在get时查看记录的时间戳,检查记录是否过期。

这种行为被称为lazy(惰性)expiration。

因此,好处是memcached不会在过期监视上耗费CPU时间。

比如:

有set(name,asion,0,3600)过了3600秒就失效,失效后,并不会自动删除,只有当get查询时,检测是否过期,如果过期则删除,填充新的数据

6.memcache的LRU算法

memcached会优先使用已超时的记录的空间,但即使如此,也会发生追加新记录时空间不足的情况,此时就要使用名为LeastRecentlyUsed(LRU)机制来分配空间。

顾名思义,这是删除“最近最少使用”的记录的机制。

因此,当memcached的内存空间不足时(无法从slabclass获取到新的空间时),就从最近未被使用的记录中搜索,并将其空

间分配给新的记录。

从缓存的实用角度来看,该模型十分理想。

当mecache里面的数据空间(默认是64M)已经占满了,再继续存储数据能否存储呢?

答:

能存储,要删除过期的数据,如果都没有过期,则删除最不活跃的数据,腾出空间给后面添加数据。

例如:

以122Bytes的slab举例,当数据装满后,如果来了一个100Bytes数据,如何处理?

分析:

内存的管理LRU算法、FIFO算法(基本不用)

7.memcache的一些参数

在vim下如果输入了ctrl+s可以使用ctrl+q退出

-p监听的端口

-l连接的IP地址,默认是本机

-dstart启动memcached服务

-drestart重起memcached服务

-dstop|shutdown关闭正在运行的memcached服务

-dinstall安装memcached服务

-duninstall卸载memcached服务

-u以的身份运行(仅在以root运行的时候有效)

-m最大内存使用,单位MB。

默认64MB

如果系统是32位的,则最大限制为2G,如果系统是64位,则无限制。

-M内存耗尽时返回错误,而不是删除项

-c最大同时连接数,默认是1024

-f块大小增长因子,默认是3

-n最小分配空间,key+value+flags默认是48

-h显示帮助

-v输出警告和错误信息

-vv打印客户端的请求和返回信息

-i打印memcached和libevent的版权信息

高级特性

分布式memcache配置

什么是分布式?

由于单台memcache的服务能力有限(单台服务器的内存大小是有限的),可以使用多台memcache来提供缓存的功能,这种架构就叫做memcache的分布式缓存系统。

如何实现?

在客户端实现分布式(就是在php程序端实现对数据进行分布式保存,php程序决定数据保存众多分布式服务器中的其中一台),在数据保存之前,根据一定的算法,将数据保存到那台memcache服务器上,在获取数据的时候,按照前面相同的算法去对应的memcache服务器上获取数据

分布式算法

1.取摸算法

将key的值对服务器的台数取模,然后将对应的value值保存到对应的余数的那台memcache服务器上,一般这个hash函数crc32(key)%3

crc32()这个函数可以使得一个字符串变成一个32位的整数

坏处:

当某一台服务器宕机或者需要增加一台服务器的时候,这个时候缓存数据基本全部失效,因为除数变了。

不严格的公式,命中率=取到数据/总数1/NN代表服务器的台数

引发出来的问题:

当memcache宕机之后,缓存数据失效,这个时候MySQL的压力会骤增,

这个时候,MySQL会宕机,然后在重启MySQL,MySQL会在短时期内再次宕机,然后,稍微延迟一点(缓存已经重新建立了一部分),又宕机。

随着时间的慢慢推移,MySQL基本上趋于稳定,缓存系统成功建立。

因为缓存数据不存在,所有的请求全部要转向MySQL来提供,这种现象就叫做memcache的雪崩现象。

概图:

实操:

1.使用分布式缓存

2.从分布式获取

3.效果

2.一致性hash实现分布式

1.设置一个0-2^32次方的圆环

2.将服务器的IP通过某种hash函数(crc32)映射为圆环上点(服务器的位置)

3.将数据的key也安装hash函数运算,从起点0开始,按照圆环顺时针方向旋转,将对应的值保存到不比自己小的一个服务器位置上。

好处:

当某一台服务器宕机之后,数据的影响是最小的,只影响当前这一台服务器上的数据。

缓存雪崩现象

由于某个memcache节点的缓存数据失效,导致其他memcache节点的缓存命中率下降,缓存中缺失的数据会去MySQL数据库中查询,短时期内,造成了MySQL服务器压力巨大,造成宕机,就叫做缓存雪崩现象。

雪崩造成的原因?

1.由于算法不当,取摸算法,造成大量缓存失效,会引发雪崩

解决方案:

一致性hash算法

2.缓存时间都是同一时间,缓存系统会在同一时间全部失效,这个也会造成雪崩

缓存时间设置成一个范围内的随机时间(3-9小时)

memcache如何做高可用

1.使用repcached实现,全称replicationcached是由日本人发明的memcached的高可用性技术,简称复制缓冲区技术。

2.MemcacheDB是一个分布式、key-value形式的持久存储系统。

由sina人员开发。

它不是一个缓存组件,而是一个基于对象存取的、可靠的、快速的持久存储引擎。

协议跟memcache一致(不完整),所以很多memcached客户端都可以跟它连接。

MemcacheDB采用BerkeleyDB作为持久存储组件,故很多BerkeleyDB的特性的他都支持。

扩展

1.如何在Linux下给一个php添加一个扩展,说出通用步骤(redis)?

1.下载对应扩展源码

2.上传放入/usr/local/src/

3.解压并进入文件夹内

4.在文件夹内执行绝对路径下的phpize/usr/local/php/bin/phpize

5.执行configure./configure--with-php-config=/usr/local/php/bin/php-config

6.make&

&

makeinstall

7.生成一个目录文件,文件下面有一个.so结尾的文件

8.修改php.ini文件

9.增加extension_dir=目录extension=.so文件

10.重启Apache

11.添加phpinfo()

12.浏览器查看

2.memcache的安全性如何解决?

由于memcache的本身设计就是极为简洁的,根本没有设置权限方面的限制。

为什么不设置权限?

只提供缓存功能,为了精简

1.放在内网192.168.1.110内网IP外网无法访问

2.写一个防火墙验证规则,只允许自己规定IP的包可以转进来,其他的全部丢弃

3.当使用文件保存session文件时候,如果文件过多,如何处理?

一般来说,超过65535个session文件的时候,这个时候session的获取就会变得异常缓慢,意味php代码执行很慢,如何解决?

分层处理:

一个文件夹下建立A-Z开头的文件夹然后A_Z在建立

使用memcache处理:

单台memcache处理能力有限,就使用分布式memcache来处理

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 求职职场 > 简历

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2