memcached是高性能的分布式内存缓存服务器,通过缓存数据库查询结果,减少数据库访问次数,提高动态web应用的速度和可扩展性。为了提高性能,memcached把数据存储在内存中,重启memcached或操作系统会导致全部数据消失,当内存容量达到指定值后,会使用LRU算法自动删除不使用的(或者很少使用的)缓存。memcached本身是为缓存设计的服务器,因此并没有过多考虑数据的持久化问题。

 
memcached服务器工作方式

   memcached使用多路复用IO模型以支持高并发访问。memcached会为每个item设置一个过期时间,但不是到期就把item从内存中删除,而是访问item时如果到了有效期,才把item从内存中删除,当memcached使用内存数大于设置的最大内存使用数时,为了腾出内存空间来存放新的数据,memcached会启用LRU算法淘汰旧的数据项memcached多线程模型:主线程接受客户端连接,并把连接分配给工作线程处理,有工作线程处理客户端连接的请求。


memcached服务器安装
 
1、首先安装依赖库libevent

1)官网http://libevent.org/ 下载最新源码,如:libevent-2.0.20-stable.tar.gz

2)解压到/usr/src目录 ,执行命令:sudo tar -zxvf libevent-2.0.20-stable.tar.gz -C /usr/src

3)进入解压以后的目录,用sudo方式执行命令:sudo ./configure --prefix=/usr/local/libevent ; make ; make install

 
2、安装Memcached

1)下载

去官网 http://memcached.org/ 下最新源码,我用的是memcached-1.4.5.tar.gz

2)解压缩

#tar xzfv  memcached-1.4.5.tar.gz

3)进入目录

#cd memcached-1.4.5

4)编译,安装
./configure --prefix=/local/memcached
make
make install
安装完成后,会在 /local/memcached 出现bin和share目录
 
5)进入bin目录,启动memcache:
./memcached -d -u nobody -m 512 127.0.0.1 -p 11211
 
异常:error while loading shared libraries: libevent-2.0.so.5: cannot open shared object file: No such file or directory
原因:找不到libevent-2.0.so.5类库
解决办法:
确定加载的类库路径:  #LD_DEBUG=libs ./memcached -v 2>&1 > /dev/null | less
出现(END)可以直接输入p退出  #ln -s /usr/local/lib/libevent-2.0.so.5 /lib/libevent-2.0.so.5

现在可以正常启动memcached了:#./memcached -d -u nobody -m 512 127.0.0.1 -p 11211        到这里,看到memcached已经启动,说明安装成功。

启动参数说明:
-d 选项是启动一个守护进程,
-m 是分配给 Memcache使用的内存数量,单位是 MB,这里是512MB
-u 是运行 Memcache的用户,这里是nobody
-l 是监听的服务器 IP地址,这里127.0.0.1 表示本机服务器
-p 是设置 Memcache监听的端口,这里设置了 11211,最好是1024 以上的端口
-c 选项是最大运行的并发连接数,默认是 1024,这里设置了256 ,按照你服务器的负载量来设定
-P 是设置保存 Memcache的pid 文件
-vv 开启调试信息和错误输出

 
memcached客户端安装
 
memcached客户端非常丰富,以php客户端memcache php扩展为例:

1)安装memcache PHP扩展

#wget http://pecl.php.net/get/memcache-2.2.4.tgz
#tar zxvf memcache-2.2.4.tgz
#cd memcache-2.2.4

2)找phpize

#whereis phpize 本机是/usr/bin/phpize
# /usr/bin/phpize
# ./configure --with-php-config=/usr/bin/php-config
# make
# make install

3)在/etc/php.ini文件添加一行:extension=memcache.so

4)重启httpd:#service httpd restart

5)确认:php里使用phpinfo()看到如下信息说明memcached扩展才算安装好!

相关操作

配置文件:/etc/sysconfig/memcached

chkconfig --level 2345 memcached on #设置开机启动memcached服务

service memcached start #启动memcached服务

telnet localhost 11211 #用telnet连接到memcached服务器,即可执行memcached客户端命令

stats #当前memcached服务器的运行状态,重要指标:
cmd_get 查询缓存次数
cmd_set 设置key=>value的次数,没找到就写缓存
get_hits 总命中数
get_misses总未命中数

add 添加一个数据到服务器

set 替换一个已经存在的数据

get 获得数据的值

delete 删除数据

相关工具:

1)memcached-tool   #memcached perl管理工具

memcached-tool 127.0.0.1:11211

2)图像界面监控memcache.php

部署memcache.php

PHP调用memcached示例

php的memcache客户端应用程序扩展包含两组接口,一组是面向过程的接口,一组是面向对象的接口。PHP代码示例:

<?php

$memcache = new Memcache; //创建一个memcache对象

$memcache->connect('localhost', 11211) or die ("Could not connect" ); // 连接Memcached服务器

$memcache->set('key', 'test'); //设置一个变量到内存中,名称是key值是test

$get_value = $memcache ->get('key' ); // 从内存中取出key的值

echo $get_value;

?>

memcached服务器监控调优

1、MemAdmin:MemAdmin是一款可视化的Memcached管理控制台与监控工具,使用PHP开发,体积小,操作简单。主要功能包括服务器参数监控:STATS、SETTINGS、ITEMS、SLABS、SIZES实时刷新,服务器性能监控:GET、DELETE、INCR、DECR、CAS等常用操作命中率实时监控等

2、Twemperf(mcpery):一款memcached性能测试工具,可以模拟大并发set、get等操作。

使用实例:

创建1000个并发连接;建立速度为每秒1000个,每一个连接发送set请求10次(相当于迭代10次),这10次请求以每秒1000的速度下发;设置连接和响应的超时时间为5s,设置tcp连接的断开时间(默认不开启),发送存储数据的大小(默认是1个字节),我们设为1个字节(也就是存入到memcached的value的大小)。

mcperf --num-conns=1000 --conn-rate=1000 --num-calls=10 --call-rate=1000 --timeout=5 --linger=0 --sizes=d1

结果字段说明:

3、memcached调优方法

1)存储的数据越大,则随着并发数的上升memcached处理请求的速度下降越明显,因此,存储数据不宜过大,如果确实要存储较大数据,建议拆分成两个或更多key来存储。

2)集群部署提升的性能越明显(平均耗时小,吞吐量大)

3)memcached中key最大允许250个英文字符或27个中文字,超过这些最大值,则数据无法存储。另外官方文档指出,value最大允许存储1M数据,超过1M的数据无法存储,因此建议key不宜过大,value也不宜过大,如果value超过1M,建议存储到两个或多个key中。

4)memcache内存存储满数据之后,之后再存储的数据不会再消耗内存,最老的数据会被删除(LRU算法),memcached启动参数默认是开启LRU(近期最少使用算法)的。如果启动参数加上-M则不开启LRU算法,此时如果内存已满再存放数据则会报错。


FAQ:

memcache与memcached的有什么区别?

Memcache和Memcached是两个版本的扩展库,Memcache出现的较早,是一个原生版本,完全在php框架内开发的,支持的方法略微少点,而Memcached出现的较晚,比较先进,支持的方法多点,是建立在libmemcached的基础上。详见:http://www.cnblogs.com/wangtao_20/p/4057591.html

当使用多台memcached服务器时怎么确定一个数据应该保存到哪台服务器上?
      memcached分布式方案:普通hash分布、一致性hash分布。

memcached服务器的更多相关文章

  1. 源码安装Memcached服务器及其2种PHP客户端

    本文所用源码包皆为当时最新stable稳定版. 安装memcached服务器 先安装libevent, 最新版为2.0.21 tar -zxvf libevent-2.0.21-stable.tar. ...

  2. 为php安装memcached扩展连接memcached服务器

    首先必须完成必要的软件安装,memcached是php连接memcached服务器的php扩展 以前有个叫memcache也是php连接memcached服务器的扩展 php的memcache和mem ...

  3. windows下安装Memcached服务器,PHP的memcache扩展

    Memcahed 介绍:Memcahed是一个内存缓存服务器 (类似MySQL服务器) 作用:提高web的响应速度,例如缓存数据库查询结果 原理:把数据存到内存中 (提高速度的原因) 教程相关 系统: ...

  4. Memcached服务器UDP反射放大攻击

    1.前言 2月28日,Memcache服务器被曝出存在UDP反射放大攻击漏洞.攻击者可利用这个漏洞来发起大规模的DDoS攻击,从而影响网络正常运行.漏洞的形成原因为Memcache 服务器UDP 协议 ...

  5. nginx+nodejs+mysql+memcached服务器后台架设centos6.5

    需要的下面四个工具最好都采用yum安装,不要采用编译安装的方法,因为编译安装会导致某些依赖关系丢失. nginx 作为HTTP和反向代理,处理静态页面,动态服务交由nodejs服务. nodejs作为 ...

  6. PHP与Memcached服务器交互的分布式实现源码分析

    转自: http://blog.csdn.net/hguisu/article/details/7353595 前段时间,因为一个项目的关系,研究了php通过调用memcache和memcached ...

  7. 安装memcached服务器和PHP中添加memcache拓展模块

    Memcached是一个高性能的分布式内存对象缓存系统,用于动态web应用以减轻数据库的负载.它通过在内存中缓存数据和对象来减少读取数据库的次数,从而提拱动态 数据驱动网站的速度. memcached ...

  8. Memcached服务器上实现多个实例(约约问题排查)

    约约测试服上出行一个问题,司机收车失败. (1)经查看代码是null指针异常. 针对,之前,同套代码发布到华威测试服,未出现该问题,遂认定不是代码问题. (2)打印异常信息,获取null值异常的收车司 ...

  9. memcached 缓存服务器

    Memcached 缓存服务器 Memcached 是高性能的分布式内存缓存服务器. 一般的使用目的是,通过缓存数据库查询结果,减少数据库访问次数,以提高动态web应用的速度.提高可扩展性. 主要特点 ...

随机推荐

  1. Android 图片滤镜工具——高斯模糊

    ===================高斯模糊========================= 创建一个 ImageFilter 类(滤镜工具),代码如下: import android.graph ...

  2. C# mongodb 驱动操作(Z)

    Query.All("name", "a", "b");//通过多个元素来匹配数组 Query.And(Query.EQ("nam ...

  3. 2016ACM/ICPC亚洲区沈阳站-重现赛赛题

    今天做的沈阳站重现赛,自己还是太水,只做出两道签到题,另外两道看懂题意了,但是也没能做出来. 1. Thickest Burger Time Limit: 2000/1000 MS (Java/Oth ...

  4. mongoosejs学习地址

    http://mongoosejs.com/docs/api.html#querystream-js Node的小基友supervisor 和 forever 不要忘记了,相信你会喜欢他们的:) ht ...

  5. iOS8系统H264视频硬件编解码说明

    公司项目原因,接触了一下视频流H264的编解码知识,之前项目使用的是FFMpeg多媒体库,利用CPU做视频的编码和解码,俗称为软编软解.该方法比较通用,但是占用CPU资源,编解码效率不高.一般系统都会 ...

  6. push 到下一界面明显卡顿的现象

    今天搭建界面,界面间的跳转使用了 push方法,结果发现界面间转换时有明显的卡顿现象,并没有做过数据请求之类的处理,所以感觉好神奇.以前好像也遇到过,当时在push 到的下级界面加个背景色.现在重新这 ...

  7. SVM实现邮件分类

    首先学习一下svm分类的使用. 主要有以下步骤: Loading and Visualizing Dataj Training Linear SVM Implementing Gaussian Ker ...

  8. MVC和Webform的比较和替换总结

    1.自定义控件,页面赋值可用HtmlHelper进行扩展 2.aspx的母版页可用Layout代替 3.webform的request,response方法在MVC中同样适应,只是类有点不同,例如表单 ...

  9. 解决SVN Upgrade working copy问题

    解决SVN Upgrade working copy,无法上传到svn上的解决方案是SVN Upgrade working copy老有问题,而且还特别慢.还有种方法,将原来上传到svn的项目中有个. ...

  10. [perl]字符串转拼音首字母(支持多音字)

    实现的思路是,查表找到该字的所有读音,然后取首字母. 代码: while (<DATA>) { chomp; })(.*)$/; $all =~ s/^\s+//; ### 只保留无音标号 ...