memcached服务器

时间:2023-02-12 12:56:52

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

memcached服务器

 
memcached服务器工作方式

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

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

结果字段说明:

memcached服务器

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服务器&comma;PHP的memcache扩展

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

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

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

  5. nginx&plus;nodejs&plus;mysql&plus;memcached服务器后台架设centos6&period;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. Bash On Win10 &lpar;WSL&rpar; 安装 Odoo 开发环境

    前段时间微软发布了Bash On Win10,虽然目前还是Beta阶段,但是一想到再也不用折腾虚拟机上跑odoo了,就忍不住手痒,尝试在WSL上安装了一下odoo,结果比较惊喜,感觉可以抛弃Vitru ...

  2. eclipse-debug时直接进入&sol;不进入&sol;提示进入调试页面修改

    eclipse使用debug调试程序时 默认设置每次程序走到断点位置时提示是否进入调试页面(如图) 而个人习惯有些系统直接进入调试页面.也有些人系统不进入调试页面调试 在这里勾选Remember my ...

  3. 浅谈DES加密算法

    一.DES加密算法介绍 1.要求密钥必须是8个字节,即64bit长度 2.因为密钥是byte[8] , 代表字符串也可以是非可见的字节,可以与Base64编码算法一起使用 3.加密.解密都需要通过字节 ...

  4. 安卓TV开发(三) 移动智能设备之实现主流TV电视盒子焦点可控UI

    前言:移动智能设备的发展,推动了安卓另一个领域,包括智能电视和智能家居,以及可穿戴设备的大量使用,但是这些设备上的开发并不是和传统手机开发一样,特别是焦点控制和用户操作体验上有很大的区别,本系列博文主 ...

  5. Jmeter Beanshell 用法

    Beanshell 的用法 什么是beanshell Beanshell是一种完全符合java语法的脚本语言,并且拥有自己的内置对象和语法 Beanshell是用java写的,一个小型嵌入式java源 ...

  6. C&num;遍历SharePoint文档库下所有文档包括文档库中子文件夹下所有文档

    /// <summary> /// 获取取子文件下所有文件 /// </summary> /// <param name="web"></ ...

  7. SpringBoot&lpar;10&rpar; Servlet3&period;0的注解:自定义原生Servlet、自定义原生Listener

    一.自定义原生Servlet 1.启动类里面增加注解 @ServletComponentScan 2.Servlet上添加注解  @WebServlet(name = "userServle ...

  8. ---转载---phython资料

    整理汇总,内容包括长期必备.入门教程.练手项目.学习视频. 一.长期必备. 1. *,是疑难解答.bug排除必备网站,任何编程问题请第一时间到此网站查找. https://st ...

  9. Tronado自定义Session

    这里就不一一诉说Session和Cookie直接的关系了,下面以一张图来概括: 下面是一个简单的Tornaod自定义Session的例子,看完后你可能会明白为什么我们在Django里可以直接使用req ...

  10. Swift学习笔记 - OC中关于NSClassFromString获取不到Swift类的解决方案

    在OC和Swift混编的过程中发现在OC中通过NSClassFromString获取不到Swift中的类,调研了一下发现问题所在,下面是我的解决方案: 问题的发现过程 UIViewController ...