memcached完全剖析(1-5)整理
使用Memcached进行对象缓存和内存优化

使用Memcached进行对象缓存和内存优化随着互联网的迅猛发展,数据量快速增长,对于网站的访问速度和稳定性提出了更高的要求。
而在这个背景下,Memcached作为一款轻量级的缓存系统,得到了越来越多的应用。
一、什么是MemcachedMemcached是一款高性能的分布式内存缓存系统,主要用于减轻数据库负载压力,提高网站访问速度和稳定性。
它采用了键值对的存储方式,在内存中对数据进行存储和访问。
这样可以有效地降低数据库的访问频率,提高网站的响应速度。
Memcached最初由Brad Fitzpatrick开发,是一个开源项目。
它运行在一个分布式的环境中,客户端通过TCP/IP协议连接到Memcached服务器,将数据存储在内存中,可以快速地读取数据。
二、为什么要使用Memcached在一个传统的web应用中,当一个用户请求一个页面时,通常需要连接到数据库中查询数据,然后渲染网页。
但是随着访问量的增加,数据库会遇到性能瓶颈,导致访问速度变慢。
而Memcached作为一个分布式缓存系统,可以有效地解决数据库访问频率过高的问题,减轻数据库的负担。
同时,由于Memcached是一款基于内存的缓存系统,访问速度非常快,能够提供快速的读取服务。
因此,在高并发的情况下,使用Memcached可以提高网站的响应速度,提供更好的用户体验。
三、如何使用Memcached使用Memcached非常简单,只需要在代码中添加一些缓存相关的代码即可。
下面以PHP为例,介绍如何在代码中使用Memcached。
1. 安装和启动Memcached首先需要安装Memcached,并启动Memcached服务。
sudo apt-get install memcached2. 使用PHP扩展在PHP代码中,可以使用PHP扩展来连接到Memcached服务器并进行相关的操作。
我们可以使用Memcached类来进行操作,示例如下:<?php// 创建一个Memcached对象$mem = new Memcached();// 添加Memcached服务器$mem->addServer("localhost", 11211);// 存储数据$mem->set("key", "value", 3600);// 获取数据$val = $mem->get("key");// 输出数据echo $val;>3. 使用缓存进行性能优化在实际使用中,需要根据具体的应用场景来选择合适的缓存策略。
Memcached使用及原理

研发管理部 陈海涛 2011-06-10
2014-6-25
1
什么是Memcached
Memcached是(运营LiveJournal的技术团队)开发的一套分布式内存对象
缓存系统。常用于减少数据库负载,提升性能。 社区网站主页:/ 开发团队主页:/ 项目主页:/
结果:老数据留在尾部(tail)。
2014-6-25 © 2004 - 2010 UC Mobile
16
Set时LRU
set时要为当前key分配内存 先从本slab队尾检查是否有过期数 据,共检查50条。
是否查到过期数据, 查到则淘汰1条后中止。 NO 新分配内存是否OK (是否还有可用内存)? NO 是否设置了-M参数表示不能踢 出有效数据 YES NO YES 内存分配失 败,返回出错 YES
2014-6-25 © 2004 - 2010 UC Mobile
7
分布式-客户端实现
2014-6-25 © 2004 - 2010 UC Mobile
8
分布式-一致性hash
2014-6-25 © 2004 - 2010 UC Mobile
9
内存管理-术语
2014-6-25 © 2004 - 2010 UC Mobile
2014-6-25 © 2004 - 2010 UC Mobile
6
常用优化参数
-f <factor> chunk size的增长因子(合理范围 1.05~2,默认:1.25) -t <num> memcached启动的工作线程数,默 认为4,建议不要超过系统CPU的个数。 -I <num>[k|K|m|M] 改变slab page的容量 大小,以调整ITEM容量的最大值,默认为1MB。 不能少于1024bytes(即1K),不能大 于128MB。memcached不推荐大于1MB。
Memcached原理及应用

查看memcached的内部状态
▪ memcached有个名为stats的命令,使用它可 以获得各种各样的信息。
▪ 此外,输入"stats slabs"或"stats items"还可 以获得关于缓存记录的信息
查看slabs的使用状况
▪ 使用memcached的创造着Brad写的名为 memcached-tool的Perl脚本,可以方便地获 得slab的使用情况 (它将memcached的返回 值整理成容易阅读的格式)。
▪ 指定“-M”参数启动后,内存用尽时memcached会 返回错误。 memcached毕竟不是存储器,而是缓 存,所以推荐使用LRU。
▪ 协议文档参见: ▪ code.sixapart/svn/memcached/trunk/server/
doc/protocol.txt
基于libevent的事件处理
▪ libevent是个程序库,它将Linux的epoll、BSD类操 作系统的kqueue等事件处理功能 封装成统一的接 口。即使对服务器的连接数增加,也能发挥O(1)的 性能。
memcached的分布式
▪ memcached尽管是“分布式”缓存服务器, 但服务器端并没有分布式功能。 各个 memcached不会互相通信以共享信息。,进 行分布式完全取决于客户端的实现。
memcached的分布式
安装memcached
▪ 先安装libevent ▪ /~provos/libevent/ ▪ 再安装memcached ▪ danga/memcached/download.bml
Memcached原理及应用
协议简单
▪ memcached的服务器客户端通信并不使用复 杂的XML等格式, 而使用简单的基于文本行 的协议。
memcached文档

Memcached入门学习文档——小兵突击@序:什么是memcached:Free & open source, high-performance, distributed memory object caching system自由、开源、高性能、分布式的内存对象缓存系统。
由livejounal旗下的danga公司开发的老牌的nosql应用nosql:not only sql,即不仅仅是关系型数据库。
特点:key-value键值对存储,如memcached、redis或基于文档存储:如mongoldb一、使用前的准备(关于telnet)Telnet用于远程操作互联网中的设备或终端计算机服务器,可以有效的减少现场操作的麻烦。
因为设备或终端是遍布整个省或市,有的甚至是国外,如何高效的处理问题是当务之急。
除了telnet还可以ssh使用crt软件登陆,telnet开启的话比较方便windows自带的cmd命令行下就可以运行。
telnet命令格式(cmd窗口下):telnet localhost(ip地址) 端口号,如:telnet 192.168.5.109 11211Win7系统中使用想使用telnet命令时往往会出现如下错误:【'telnet'不是内部或外部命令,也不是可运行的程序或批处理文件】。
解决方法:①首先打开[控制面板],找到[程序和功能],然后点击左侧的[打开或关闭Windows功能]②打开或关闭Windows功能③等待一会就OK啦二、Linux下安装memcached1、安装编译工具gcc make libtool autoconfig 的命令:yum install gcc make libtool autoconfig2、安装memcached的依赖库命令:wget --no-check-certificate3、wget (memcached源文件)4、先装依赖库。
Memcache资料

Memcache缓存1.MyBatis缓存MyBatis缓存分为一级缓存与二级缓存一级缓存:基于PerpetualCache 的HashMap本地缓存,其存储作用域为 Session,当 Session flush 或 close 之后,该Session中的所有Cache 就将清空。
二级缓存:与一级缓存其机制相同,默认也是采用PerpetualCache,HashMap存储,不同在于其存储作用域为Mapper(Namespace)缓存更新机制:当某一作用域(一级缓存Session/二级缓存Namespaces)的进行了C/U/D 操作后,默认该作用域下所有select 中的缓存将被清空避免使用二级缓存:/isea533/article/details/445662572.Memcachea)简介Memcache 是一个高性能的分布式内存对象缓存系统,用于动态Web应用以减轻数据库负载。
它通过在内存中缓存数据和对象来减少读取数据库的次数,从而提高动态、数据库驱动网站的速度。
Memcache基于一个存储键/值对的hashmapb)安装安装命令-d 选项是启动一个守护进程-m 是分配给Memcache使用的内存数量,单位是MB,默认是64MB-u 是运行Memcache的用户-L 是监听的服务器IP地址,默认应该是本机-I page大小,默认1M-p 是设置Memcache监听的端口,默认是11211,最好是1024以上的端口-c 选项是最大运行的并发连接数,默认是1024,按照你服务器的负载量来设定-P 是设置保存Memcache的pid文件位置-h 打印帮助信息-f 指定chunk增长因子大小,该值越小所能提供的chunk间隔越小,可以减少内存的浪费-n chunk最小尺寸-v 输出警告和错误信息-vv 打印客户端的请求和返回信息PS:Memcached单进程在32位系统中最大使用内存为2G,若在64位系统则没有限制,这是由于32位系统限制单进程最多可使用2G内存,要使用更多内存,可以分多个端口开启多个Memcached进程最大30天的数据过期时间,设置为永久的也会在这个时间过期Key: 最大键长为250字节,大于长度无法存储,常量KEY_MAX_LENGTH 250控制Value: 单个item最大数据是1MB,超过1MB数据不予存储,常量POWER_BLOCK 1048576进行控制运行命令1. 使用telnet连接Memcache服务器端口2. 连接上端口输入stats命令,获取描述Memcache服务器运行情况的参数操作命令 /zzulp/article/details/7823511 命令参数以及用法: 1. s et:命令用于向缓存添加新的键值对。
Memcached 缓存技术介绍

优化
调试块大小 使用 Growth Factor进行调试: 启动时指定 Growth Factor(通过 -f选项),可以适当控制 slab差异,默认值为1.25。
以 verbose模式启动 Memcached: 默认 Growth Factor输出(f=1.25): # memcached -m 1024 -c 40960 -u root -p 11219 -P /var/run/m11219.pid -vv slab class 1: chunk size 96 perslab 10922 slab class 2: chunk size 120 perslab 8738 slab class 3: chunk size 152 perslab 6898 slab class 4: chunk size 192 perslab 5461 …… 设置 Growth Factor为 2倍(f=2): # memcached -m 1024 -c 40960 -u root -p 11219 -P /var/run/m11219.pid -f2 -vv slab class 1: chunk size 96 perslab 10922 slab class 2: chunk size 192 perslab 5461 slab class 3: chunk size 384 perslab 2730 slab class 4: chunk size 768 perslab 1365 …… 输出可见,从192字节的组开始,组大小依次增大为原来的 2倍。 这样设置后,slab之间的差别比较大,有些情况下会浪费内存。 通过重新计算数据的预期平均长度,调整 growth factor,以获得最恰当的内存使用。
命中率
MemCached参考资料

MemCached帮助文档1、安装(for Windows)memcached 1.2.4 for win32.下载地址:/memcached-win32/例如:c:\memcached\memcached.exe -d installc:\memcached\memcached.exe -d start(默认端口11211)参数解释:-d 以守护程序(daemon)方式运行 memcached;-m 设置 memcached 可以使用的内存大小,单位为 M;-l 设置监听的 IP 地址,如果是本机的话,通常可以不设置此参数;-p 设置监听的端口,默认为 11211,所以也可以不设置此参数;-u 指定用户,如果当前为 root 的话,需要使用此参数指定用户。
-h 帮助2、查看使用状态首先登录到服务器,然后在cmd命令行中键入telnet 127.0.0.1 11211其中127.0.0.1是服务器的地址(这里是本机),11211是memcached绑定的端口号。
之后命令行窗口全黑只有光标提示,摸黑输入stats,即可得到描述Memcached服务器运行情况的参数。
如下图:其中,uptime 是memcached运行的秒数,cmd_get是查询缓存的次数。
这两个数据相除一下就能得到平均每秒请求缓存的次数——最近niupu的流量很低,所以平均也就一秒请求一次多,这么点大的压力,用文件系统缓存一样没问题,根本不会体现出使用memcached的优越。
下面的cmd_set 就是设置key=>value的次数。
整个memcached是个大hash,用cmd_get 没有找到的内容,就会调用一下cmd_set写进缓存里。
紧跟着是get_hits,就是缓存命中的次数。
缓存命中率 = get_hits/cmd_get * 100%。
下面的get_misses的数字加上get_hits应该等于cmd_get。
memcached技术-韩顺平

memcached技术第 1 章MEMCACHED是什么 (1)1.1MEMCACHED的历史1 1.2MEMCACHED的运行原理1 1.3MEMCACHED的安装11.3.1windows下的安装步骤 (2)1.3.2Liunx下安装memcached步骤 (3)第 2 章对MEMCACHED进行操作(CRUD) (5)2.1通过TELNET操作MEM5 2.2 7 2.3通过PHP程序对MEMCACHED进行操作(通过DLL扩展) 7 2.4如何实现WINDOWS 操作LINUX下的MEM12 2.5MEMCACHED最佳实践12 2.6使用源码对MEMCACHED操作13第 3 章MEMCACHED的机制了解 (14)3.1MEMCACHED是基于C/S的架构,协议是文本协议14 3.2MEMCACHED是使用LIBEVENT处理并发14 3.3MEMCACHED是内存存储数据,当MEM重启,或者操作系统重新,数据消失,当数据满后,再放入数据,则使用LRU算法(最近最少使用),对数据置换. 14 3.4MEMCACHED是基于客户端分布式的系统15第 4 章MEMCACHED的细节说明 (17)4.1MEMCACHED的数据生命周期17 4.2S ESSION数据放入到M EMCACHED17 4.3MEMCACHED的安全性讨论18 4.4什么数据放入到MEMCACHED提示19第 1 章memcached是什么概述: memcached就是一个高性能的支持分布式的内存存储系统(软件)。
你可以把它看成一个巨大的hash表: 结构key(键) value(值)字符串(唯一) 整数,浮点数,字符串,布尔,数组,对象,null,二进制数据(视频,音频,图片)1.1memcached的历史国外livejoural 网站,开发memcached软件.=>很多大型网站都开始使用。
memcached 是各种开发程序使用比如php,,jsp网站Memcached是一个高性能的分布式的内存对象缓存系统,目前全世界不少人使用这个缓存项目来构建自己大负载的网站,来分担数据库的压力,通过在内存里维护一个统一的巨大的hash表,它能够用来存储各种格式的数据,包括图像、视频、文件以及数据库检索的结果等。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
memcached全面剖析作者:长野雅广(Masahiro Nagano)作者:前坂徹(Toru Maesaka)翻译:charlee整理:yaykey发表时间:2008/07/02‐2008/07/30翻译时间:2008/07/10‐2008/07/31整理时间:2010/11/09原文链接:http://gihyo.jp/dev/feature/01/memcached/0001 http://gihyo.jp/dev/feature/01/memcached/0002 http://gihyo.jp/dev/feature/01/memcached/0003 http://gihyo.jp/dev/feature/01/memcached/0004 http://gihyo.jp/dev/feature/01/memcached/0005译文地址:•第1次:/2008/07/10/memcached‐001/ •第2次:/2008/07/11/memcached‐002/ •第3次:/2008/07/16/memcached‐003/ •第4次:/2008/07/24/memcached‐004/ •第5次:/2008/07/31/memcached‐005/2 / 81目录1. memcached完全剖析–1. memcached的基础 (5)1.1. memcached是什么? (7)1.2. memcached的特征 (9)1.2.1. 协议简单 (9)1.2.2. 基于libevent的事件处理 (9)1.2.3. 内置内存存储方式 (10)1.2.4. memcached不互相通信的分布式 (10)1.3. 安装memcached (11)1.3.1. memcached的安装 (11)1.3.2. memcached的启动 (12)1.4. 用客户端连接 (13)1.5. 使用Cache::Memcached (15)1.5.1. 使用Cache::Memcached连接memcached (16)1.5.2. 保存数据 (17)1.5.3. 获取数据 (17)1.5.4. 删除数据 (17)1.5.5. 增一和减一操作 (18)1.6. 总结 (19)2. memcached全面剖析–2.理解memcached的内存存储 (21)2.1. Slab Allocation机制:整理内存以便重复使用 (23)2.1.1. Slab Allocation的主要术语 (24)2.1.1.1. Page (24)2.1.1.2. Chunk (24)2.1.1.3. Slab Class (24)2.2. 在Slab中缓存记录的原理 (25)2.3. Slab Allocator的缺点 (27)2.4. 使用Growth Factor进行调优 (29)2.5. 查看memcached的内部状态 (31)2.6. 查看slabs的使用状况 (33)2.7. 内存存储的总结 (35)3. memcached全面剖析–3.memcached的删除机制和发展方向 (37)3.1. memcached在数据删除方面有效利用资源 (39)3.1.1. 数据不会真正从memcached中消失 (39)3.1.2. Lazy Expiration (39)3.2. LRU:从缓存中有效删除数据的原理 (41)3.3. memcached的最新发展方向 (43)3.3.1. 关于二进制协议 (43)3.3.2. 二进制协议的格式 (43)3.3.3. HEADER中引人注目的地方 (45)3.4. 外部引擎支持 (47)3 / 813.4.1. 外部引擎支持的必要性 (47)3.4.2. 简单API设计的成功的关键 (48)3.4.3. 重新审视现在的体系 (49)3.5. 总结 (51)4. memcached全面剖析–4. memcached的分布式算法 (53)4.1. memcached的分布式 (55)4.1.1. memcached的分布式是什么意思? (55)4.2. Cache::Memcached的分布式方法 (59)4.2.1. 根据余数计算分散 (59)4.2.2. 根据余数计算分散的缺点 (60)4.3. Consistent Hashing (63)4.3.1. Consistent Hashing的简单说明 (63)4.3.2. 支持Consistent Hashing的函数库 (65)4.4. 总结 (67)5. memcached全面剖析–5. memcached的应用和兼容程序 (69)5.1. mixi案例研究 (71)5.1.1. 服务器配置和数量 (71)5.1.2. memcached进程 (72)5.1.3. memcached使用方法和客户端 (72)5.1.3.1. 通过Cache::Memcached::Fast维持连接 (73)5.1.3.2. 公共数据的处理和rehash (74)5.2. memcached应用经验 (75)5.2.1. 通过daemontools启动 (75)5.2.2. 监视 (76)5.2.3. memcached的性能 (77)5.3. 兼容应用程序 (79)5.3.1. Tokyo Tyrant案例 (79)5.4. 总结 (81)4 / 81memcached完全剖析–1. memcached的基础1.memcached完全剖析–1. memcached的基础翻译一篇技术评论社的文章,是讲memcached的连载。
fcicq同学说这个东西很有用,希望大家喜欢。
发表日:2008/7/2作者:长野雅广(Masahiro Nagano)原文链接:http://gihyo.jp/dev/feature/01/memcached/0001我是mixi株式会社开发部系统运营组的长野。
日常负责程序的运营。
从今天开始,将分几次针对最近在Web应用的可扩展性领域 的热门话题memcached,与我公司开发部研究开发组的前坂一起, 说明其内部结构和使用。
•memcached是什么?•memcached的特征o协议简单o基于libevent的事件处理o内置内存存储方式o memcached不互相通信的分布式•安装memcachedo memcached的安装o memcached的启动•用客户端连接•使用Cache::Memcachedo使用Cache::Memcached连接memcachedo保存数据o获取数据o删除数据o增一和减一操作•总结5 / 81memcached完全剖析–1. memcached的基础 6 / 81memcached完全剖析–1. memcached的基础1.1.memcached是什么?memcached是以LiveJournal旗下Danga Interactive公司的Brad Fitzpatric为首开发的一款软件。
现在已成为mixi、hatena、Facebook、Vox、LiveJournal等众多服务中提高Web应用扩展性的重要因素。
许多Web应用都将数据保存到RDBMS中,应用服务器从中读取数据并在浏览器中显示。
但随着数据量的增大、访问的集中,就会出现RDBMS的负担加重、数据库响应恶化、网站显示延迟等重大影响。
这时就该memcached大显身手了。
memcached是高性能的分布式内存缓存服务器。
一般的使用目的是,通过缓存数据库查询结果,减少数据库访问次数,以提高动态Web应用的速度、提高可扩展性。
图1 一般情况下memcached的用途7 / 81memcached完全剖析–1. memcached的基础 8 / 81memcached完全剖析–1. memcached的基础1.2.memcached的特征memcached作为高速运行的分布式缓存服务器,具有以下的特点。
•协议简单•基于libevent的事件处理•内置内存存储方式•memcached不互相通信的分布式1.2.1.协议简单memcached的服务器客户端通信并不使用复杂的XML等格式,而使用简单的基于文本行的协议。
因此,通过telnet也能在memcached上保存数据、取得数据。
下面是例子。
$ telnet localhost 11211Trying 127.0.0.1...Connected to localhost.localdomain (127.0.0.1).Escape character is '^]'.set foo 0 0 3 (保存命令)bar (数据)STORED (结果)get foo (取得命令)VALUE foo 0 3 (数据)bar (数据)协议文档位于memcached的源代码内,也可以参考以下的URL。
•/svn/memcached/trunk/server/doc/protocol.tx t1.2.2.基于libevent的事件处理libevent是个程序库,它将Linux的epoll、BSD类操作系统的kqueue等事件处理功能封装成统一的接口。
即使对服务器的连接数增加,也能发挥O(1)的性能。
memcached使用这个libevent库,因此能在Linux、BSD、Solaris等操作系统上发挥其高性能。
关于事件处理这里就不再详细介绍,可以参考Dan Kegel 的The C10K Problem。
•libevent: /~provos/libevent/•The C10K Problem: /c10k.html9 / 81memcached 完全剖析–1. memcached 的基础10 / 81 1.2.3. 内置内存存储方式为了提高性能,memcached 中保存的数据都存储在memcached 内置的内存存储空间中。
由于数据仅存在于内存中,因此重启memcached、重启操作系统会导致全部数据消失。
另外,内容容量达到指定值之后,就基于LRU(Least Recently Used)算法自动删除不使用的缓存。
memcached 本身是为缓存而设计的服务器,因此并没有过多考虑数据的永久性问题。
关于内存存储的详细信息,本连载的第二讲以后前坂会进行介绍,请届时参考。
1.2.4. m emcached 不互相通信的分布式memcached 尽管是“分布式”缓存服务器,但服务器端并没有分布式功能。
各个memcached 不会互相通信以共享信息。
那么,怎样进行分布式呢?这完全取决于客户端的实现。
本连载也将介绍memcached的分布式。