memcached是高性能的分布式内存缓存服务器,通过缓存数据库查询结果,减少数据库访问次数,提高动态web应用的速度和可扩展性。为了提高性能,memcached把数据存储在内存中,重启memcached或操作系统会导致全部数据消失,当内存容量达到指定值后,会使用LRU算法自动删除不使用的(或者很少使用的)缓存。memcached本身是为缓存设计的服务器,因此并没有过多考虑数据的持久化问题。
memcached使用多路复用IO模型以支持高并发访问。memcached会为每个item设置一个过期时间,但不是到期就把item从内存中删除,而是访问item时如果到了有效期,才把item从内存中删除,当memcached使用内存数大于设置的最大内存使用数时,为了腾出内存空间来存放新的数据,memcached会启用LRU算法淘汰旧的数据项memcached多线程模型:主线程接受客户端连接,并把连接分配给工作线程处理,有工作线程处理客户端连接的请求。
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
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
./configure --prefix=/local/memcached
make
make install
安装完成后,会在 /local/memcached 出现bin和share目录
./memcached -d -u nobody -m 512 127.0.0.1 -p 11211
现在可以正常启动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 开启调试信息和错误输出
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服务器的更多相关文章
-
源码安装Memcached服务器及其2种PHP客户端
本文所用源码包皆为当时最新stable稳定版. 安装memcached服务器 先安装libevent, 最新版为2.0.21 tar -zxvf libevent-2.0.21-stable.tar. ...
-
为php安装memcached扩展连接memcached服务器
首先必须完成必要的软件安装,memcached是php连接memcached服务器的php扩展 以前有个叫memcache也是php连接memcached服务器的扩展 php的memcache和mem ...
-
windows下安装Memcached服务器,PHP的memcache扩展
Memcahed 介绍:Memcahed是一个内存缓存服务器 (类似MySQL服务器) 作用:提高web的响应速度,例如缓存数据库查询结果 原理:把数据存到内存中 (提高速度的原因) 教程相关 系统: ...
-
Memcached服务器UDP反射放大攻击
1.前言 2月28日,Memcache服务器被曝出存在UDP反射放大攻击漏洞.攻击者可利用这个漏洞来发起大规模的DDoS攻击,从而影响网络正常运行.漏洞的形成原因为Memcache 服务器UDP 协议 ...
-
nginx+nodejs+mysql+memcached服务器后台架设centos6.5
需要的下面四个工具最好都采用yum安装,不要采用编译安装的方法,因为编译安装会导致某些依赖关系丢失. nginx 作为HTTP和反向代理,处理静态页面,动态服务交由nodejs服务. nodejs作为 ...
-
PHP与Memcached服务器交互的分布式实现源码分析
转自: http://blog.csdn.net/hguisu/article/details/7353595 前段时间,因为一个项目的关系,研究了php通过调用memcache和memcached ...
-
安装memcached服务器和PHP中添加memcache拓展模块
Memcached是一个高性能的分布式内存对象缓存系统,用于动态web应用以减轻数据库的负载.它通过在内存中缓存数据和对象来减少读取数据库的次数,从而提拱动态 数据驱动网站的速度. memcached ...
-
Memcached服务器上实现多个实例(约约问题排查)
约约测试服上出行一个问题,司机收车失败. (1)经查看代码是null指针异常. 针对,之前,同套代码发布到华威测试服,未出现该问题,遂认定不是代码问题. (2)打印异常信息,获取null值异常的收车司 ...
-
memcached 缓存服务器
Memcached 缓存服务器 Memcached 是高性能的分布式内存缓存服务器. 一般的使用目的是,通过缓存数据库查询结果,减少数据库访问次数,以提高动态web应用的速度.提高可扩展性. 主要特点 ...
随机推荐
-
Bash On Win10 (WSL) 安装 Odoo 开发环境
前段时间微软发布了Bash On Win10,虽然目前还是Beta阶段,但是一想到再也不用折腾虚拟机上跑odoo了,就忍不住手痒,尝试在WSL上安装了一下odoo,结果比较惊喜,感觉可以抛弃Vitru ...
-
eclipse-debug时直接进入/不进入/提示进入调试页面修改
eclipse使用debug调试程序时 默认设置每次程序走到断点位置时提示是否进入调试页面(如图) 而个人习惯有些系统直接进入调试页面.也有些人系统不进入调试页面调试 在这里勾选Remember my ...
-
浅谈DES加密算法
一.DES加密算法介绍 1.要求密钥必须是8个字节,即64bit长度 2.因为密钥是byte[8] , 代表字符串也可以是非可见的字节,可以与Base64编码算法一起使用 3.加密.解密都需要通过字节 ...
-
安卓TV开发(三) 移动智能设备之实现主流TV电视盒子焦点可控UI
前言:移动智能设备的发展,推动了安卓另一个领域,包括智能电视和智能家居,以及可穿戴设备的大量使用,但是这些设备上的开发并不是和传统手机开发一样,特别是焦点控制和用户操作体验上有很大的区别,本系列博文主 ...
-
Jmeter Beanshell 用法
Beanshell 的用法 什么是beanshell Beanshell是一种完全符合java语法的脚本语言,并且拥有自己的内置对象和语法 Beanshell是用java写的,一个小型嵌入式java源 ...
-
C#遍历SharePoint文档库下所有文档包括文档库中子文件夹下所有文档
/// <summary> /// 获取取子文件下所有文件 /// </summary> /// <param name="web"></ ...
-
SpringBoot(10) Servlet3.0的注解:自定义原生Servlet、自定义原生Listener
一.自定义原生Servlet 1.启动类里面增加注解 @ServletComponentScan 2.Servlet上添加注解 @WebServlet(name = "userServle ...
-
---转载---phython资料
整理汇总,内容包括长期必备.入门教程.练手项目.学习视频. 一.长期必备. 1. *,是疑难解答.bug排除必备网站,任何编程问题请第一时间到此网站查找. https://st ...
-
Tronado自定义Session
这里就不一一诉说Session和Cookie直接的关系了,下面以一张图来概括: 下面是一个简单的Tornaod自定义Session的例子,看完后你可能会明白为什么我们在Django里可以直接使用req ...
-
Swift学习笔记 - OC中关于NSClassFromString获取不到Swift类的解决方案
在OC和Swift混编的过程中发现在OC中通过NSClassFromString获取不到Swift中的类,调研了一下发现问题所在,下面是我的解决方案: 问题的发现过程 UIViewController ...