阿里云-云小站(无限量代金券发放中)
【腾讯云】云服务器、云数据库、COS、CDN、短信等热卖云产品特惠抢购

Memcached的内存管理与删除机制

447次阅读
没有评论

共计 4253 个字符,预计需要花费 11 分钟才能阅读完成。

简介

注意:Memcache 最大的 value 也只能是 1M 的空间,超过 1M 的数据无法保存(修改 memcache 源代码)。

注意:内存碎片化永远都存在,只是哪一种方式可以使得内存碎片最小。

1. 什么是内存碎片化?

在使用这种内存缓存系统的时候,由于不断的申请,释放,就会形成一些很小的内存片段,无法被利用,这种现象就叫做,内存的碎片化。这个小块就是操作系统无法使用的空间。

Memcached 的内存管理与删除机制    注意:内存碎片化永远存在,无法消除,但是可以利用最好的算法,降到最低。

注意:磁盘也是存在碎片化

Memcached 的内存管理与删除机制

2. 如何解决?

memcache 利用 slab allocator 的方式来管理(每个 slab class 大小为 1M

最小的单元叫做 chunk(小块):存放数据的仓库

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

每个 slab class 的大小为 1M

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

Memcached 的内存管理与删除机制

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

Memcached 的内存管理与删除机制

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

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

LRU 算法:最近最少使用原则。最近一段时间来,哪一个数据基本完成没有被使用过,则就清除掉这个数据。然后让新数据放到里面。

 

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

Memcached 的内存管理与删除机制

 

4. factor 调优

Memcached 的内存管理与删除机制

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

默认是 1.3,相邻 chunk 之间的比值就是增加因子。可以根据自己网站的业务调整缓存因子的大小

Memcached 的内存管理与删除机制

是因为每个业务不一样,所需要的最小的 chunk 是不一样的。这个参数使得我们的系统变得更加适应自己的业务,因为数据可以自己设定大小。

 

5. memcache 的 惰性删除

memcached 内部不会监视记录是否过期,而是在 get 时查看记录的时间戳,检查记录是否过期。这种行为被称为 lazy(惰性)expiration。因此,好处是 memcached 不会在过期监视上耗费 CPU 时间。

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

 

6. memcache 的 LRU 算法

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

顾名思义,这是删除 ” 最近最少使用 ” 的记录的机制。因此,当 memcached 的内存空间不足时(无法从 slab class 获取到新的空间时),就从最近未被使用的记录中搜索,并将其空

间分配给新的记录。从缓存的实用角度来看,该模型十分理想。

 

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

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

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

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

 

7. memcache 的一些参数

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

 

-p 监听的端口

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

-d start 启动 memcached 服务

-d restart 重起 memcached 服务

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

-d install 安装 memcached 服务

-d uninstall 卸载 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/N N 代表服务器的台数

     

    引发出来的问题:当 memcache 宕机之后,缓存数据失效,这个时候 MySQL 的压力会骤增,

    这个时候,MySQL 会宕机,然后在重启 MySQL,MySQL 会在短时期内再次宕机,然后,稍微延迟一点(缓存已经重新建立了一部分),又宕机。随着时间的慢慢推移,MySQL 基本上趋于稳定,缓存系统成功建立。

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

     

    概图:

    Memcached 的内存管理与删除机制

     

    实操:

  2. 使用分布式缓存

    Memcached 的内存管理与删除机制

  3. 从分布式获取

    Memcached 的内存管理与删除机制

  4. 效果

    Memcached 的内存管理与删除机制

     

     

  5. 一致性 hash 实现分布式

    Memcached 的内存管理与删除机制

  6. 设置一个 0 – 2^32 次方的圆环
  7. 将服务器的 IP 通过某种 hash 函数(crc32)映射为圆环上点(服务器的位置)
  8. 将数据的 key 也安装 hash 函数运算,从起点 0 开始,按照圆环顺时针方向旋转,将对应的值保存到不比自己小的一个服务器位置上。

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

    缓存雪崩现象

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

    雪崩造成的原因?

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

    解决方案:一致性 hash 算法

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

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

    memcache 如何做高可用

  11. 使用 repcached 实现,全称 replication cached 是由日本人发明的 memcached 的高可用性技术,简称复制缓冲区技术。
  12. MemcacheDB是一个分布式、key-value 形式的 持久存储系统 由 sina 人员开发。它不是一个缓存组件,而是一个基于对象存取的、可靠的、快速的持久存储引擎。协议跟 memcache 一致(不完整),所以很多 memcached 客户端都可以跟它连接。MemcacheDB 采用 Berkeley DB 作为持久存储组件,故很多 Berkeley DB 的特性的他都支持。

    扩展

  13. 如何在 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 && make install
    7. 生成一个目录文件,文件下面有一个.so 结尾的文件
    8. 修改 php.ini 文件
    9. 增加 extension_dir = 目录 extension= .so 文件
    10. 重启 Apache
    11. 添加 phpinfo()
    12. 浏览器查看
  14. memcache 的安全性如何解决?

    答:

    由于 memcache 的本身设计就是极为简洁的,根本没有设置权限方面的限制。为什么不设置权限?只提供缓存功能,为了精简

  15. 放在内网 192.168.1.110 内网 IP 外网无法访问
  16. 写一个 防火墙验证规则,只允许自己规定 IP 的包可以转进来,其他的全部丢弃

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

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

    答:

    分层处理:一个文件夹下建立 A - Z 开头的文件夹 然后 A_Z 在建立

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

CentOS 6.6 下 Memcached 源码安装配置  http://www.linuxidc.com/Linux/2015-09/123019.htm

Memcached 安装及启动脚本 http://www.linuxidc.com/Linux/2013-07/87641.htm

PHP 中使用 Memcached 的性能问题 http://www.linuxidc.com/Linux/2013-06/85883.htm

Ubuntu 下安装 Memcached 及命令解释 http://www.linuxidc.com/Linux/2013-06/85832.htm

Memcached 的安装和应用 http://www.linuxidc.com/Linux/2013-08/89165.htm

使用 Nginx+Memcached 的小图片存储方案 http://www.linuxidc.com/Linux/2013-11/92390.htm

Memcached 使用入门 http://www.linuxidc.com/Linux/2011-12/49516p2.htm

Memcached 的详细介绍:请点这里
Memcached 的下载地址:请点这里

本文永久更新链接地址:http://www.linuxidc.com/Linux/2016-04/129962.htm

正文完
星哥玩云-微信公众号
post-qrcode
 0
星锅
版权声明:本站原创文章,由 星锅 于2022-01-21发表,共计4253字。
转载说明:除特殊说明外本站文章皆由CC-4.0协议发布,转载请注明出处。
【腾讯云】推广者专属福利,新客户无门槛领取总价值高达2860元代金券,每种代金券限量500张,先到先得。
阿里云-最新活动爆款每日限量供应
评论(没有评论)
验证码
【腾讯云】云服务器、云数据库、COS、CDN、短信等云产品特惠热卖中

星哥玩云

星哥玩云
星哥玩云
分享互联网知识
用户数
4
文章数
19351
评论数
4
阅读量
7981619
文章搜索
热门文章
星哥带你玩飞牛NAS-6:抖音视频同步工具,视频下载自动下载保存

星哥带你玩飞牛NAS-6:抖音视频同步工具,视频下载自动下载保存

星哥带你玩飞牛 NAS-6:抖音视频同步工具,视频下载自动下载保存 前言 各位玩 NAS 的朋友好,我是星哥!...
星哥带你玩飞牛NAS-3:安装飞牛NAS后的很有必要的操作

星哥带你玩飞牛NAS-3:安装飞牛NAS后的很有必要的操作

星哥带你玩飞牛 NAS-3:安装飞牛 NAS 后的很有必要的操作 前言 如果你已经有了飞牛 NAS 系统,之前...
我把用了20年的360安全卫士卸载了

我把用了20年的360安全卫士卸载了

我把用了 20 年的 360 安全卫士卸载了 是的,正如标题你看到的。 原因 偷摸安装自家的软件 莫名其妙安装...
再见zabbix!轻量级自建服务器监控神器在Linux 的完整部署指南

再见zabbix!轻量级自建服务器监控神器在Linux 的完整部署指南

再见 zabbix!轻量级自建服务器监控神器在 Linux 的完整部署指南 在日常运维中,服务器监控是绕不开的...
飞牛NAS中安装Navidrome音乐文件中文标签乱码问题解决、安装FntermX终端

飞牛NAS中安装Navidrome音乐文件中文标签乱码问题解决、安装FntermX终端

飞牛 NAS 中安装 Navidrome 音乐文件中文标签乱码问题解决、安装 FntermX 终端 问题背景 ...
阿里云CDN
阿里云CDN-提高用户访问的响应速度和成功率
随机文章
浏览器自动化工具!开源 AI 浏览器助手让你效率翻倍

浏览器自动化工具!开源 AI 浏览器助手让你效率翻倍

浏览器自动化工具!开源 AI 浏览器助手让你效率翻倍 前言 在 AI 自动化快速发展的当下,浏览器早已不再只是...
恶意团伙利用 PHP-FPM 未授权访问漏洞发起大规模攻击

恶意团伙利用 PHP-FPM 未授权访问漏洞发起大规模攻击

恶意团伙利用 PHP-FPM 未授权访问漏洞发起大规模攻击 PHP-FPM(FastCGl Process M...
免费领取huggingface的2核16G云服务器,超简单教程

免费领取huggingface的2核16G云服务器,超简单教程

免费领取 huggingface 的 2 核 16G 云服务器,超简单教程 前言 HuggingFace.co...
星哥带你玩飞牛 NAS-9:全能网盘搜索工具 13 种云盘一键搞定!

星哥带你玩飞牛 NAS-9:全能网盘搜索工具 13 种云盘一键搞定!

星哥带你玩飞牛 NAS-9:全能网盘搜索工具 13 种云盘一键搞定! 前言 作为 NAS 玩家,你是否总被这些...
4盘位、4K输出、J3455、遥控,NAS硬件入门性价比之王

4盘位、4K输出、J3455、遥控,NAS硬件入门性价比之王

  4 盘位、4K 输出、J3455、遥控,NAS 硬件入门性价比之王 开篇 在 NAS 市场中,威...

免费图片视频管理工具让灵感库告别混乱

一言一句话
-「
手气不错
开发者福利:免费 .frii.site 子域名,一分钟申请即用

开发者福利:免费 .frii.site 子域名,一分钟申请即用

  开发者福利:免费 .frii.site 子域名,一分钟申请即用 前言 在学习 Web 开发、部署...
小白也能看懂:什么是云服务器?腾讯云 vs 阿里云对比

小白也能看懂:什么是云服务器?腾讯云 vs 阿里云对比

小白也能看懂:什么是云服务器?腾讯云 vs 阿里云对比 星哥玩云,带你从小白到上云高手。今天咱们就来聊聊——什...
星哥带你玩飞牛NAS-14:解锁公网自由!Lucky功能工具安装使用保姆级教程

星哥带你玩飞牛NAS-14:解锁公网自由!Lucky功能工具安装使用保姆级教程

星哥带你玩飞牛 NAS-14:解锁公网自由!Lucky 功能工具安装使用保姆级教程 作为 NAS 玩家,咱们最...
星哥带你玩飞牛NAS-16:飞牛云NAS换桌面,fndesk图标管理神器上线!

星哥带你玩飞牛NAS-16:飞牛云NAS换桌面,fndesk图标管理神器上线!

  星哥带你玩飞牛 NAS-16:飞牛云 NAS 换桌面,fndesk 图标管理神器上线! 引言 哈...
三大开源投屏神器横评:QtScrcpy、scrcpy、escrcpy 谁才是跨平台控制 Android 的最优解?

三大开源投屏神器横评:QtScrcpy、scrcpy、escrcpy 谁才是跨平台控制 Android 的最优解?

  三大开源投屏神器横评:QtScrcpy、scrcpy、escrcpy 谁才是跨平台控制 Andr...