Memcached使用手册

作者: 云计算机网 分类: 云计算知识 发布时间: 2016-08-18 23:46
memcached简介

1、memcached是一个高性能的分布式的内存对象缓存系统,通过在内存里维护一个统一的巨大的hash表,它能够用来存储各种格式的数据,包括图像、视频、文件以及数据库检索的结果等。

2、它通过在内存中缓存数据和对象来减少读取数据库的次数,从而提高动态、数据库驱动网站的速度。
3、Memcached基于一个存储键/值对的hashmap。
4、其守护进程(daemon )是用C写的,
5、但是客户端可以用任何语言来编写,并通过memcached协议与守护进程通信。

memcached安装说明

1、windows安装:参照http://www.cnblogs.com/wucg/archive/2011/03/01/1968185.html

2、liunx安装:参照http://chenzhou123520.iteye.com/blog/1933489

memcached使用方法

1、 安装完memcached后,如何连接memached呢?

使用telnet命令连接memcached服务器,在windows下有可能提示telnet命令无效,是由于telnet客户端没有安装,安装方法参见(http://jingyan.baidu.com/article/925f8cb839ca6bc0dce05666.html)。

telnet连接memcached命令如下图

开始什么都不显示,回车后输入命令 stats 查看统计信息,如下图,说明服务器运作正常。

看到这样的信息表示memcached安装运行正常,使用telnet连接memcached成功。

常用memcached命令详解

Memcached作为缓存服务器,对其操作的命令主要分为三类:

1、 服务器状态命令:可以查看memcahced服务的当前状态

2、 数据存储命令:如何存储数据到memcached服务器中

3、 数据读取命令:获取memacahed服务器中的数据

4、 数据删除命令:删除memcached服务器中的数据

一、服务器状态命令

1、 stats: memcached 实例的当前统计数据。

STAT pid 22459 进程ID
STAT uptime 1027046 服务器运行秒数
STAT time 1273043062 服务器当前unix时间戳
STAT version 1.4.4 服务器版本
STAT pointer_size 64 操作系统字大小(这台服务器是64位的)
STAT rusage_user 0.040000 进程累计用户时间
STAT rusage_system 0.260000 进程累计系统时间
STAT curr_connections 10 当前打开连接数
STAT total_connections 82 曾打开的连接总数
STAT connection_structures 13 服务器分配的连接结构数
STAT cmd_get 54 执行get命令总数
STAT cmd_set 34 执行set命令总数
STAT cmd_flush 3 指向flush_all命令总数
STAT get_hits 9 get命中次数
STAT get_misses 45 get未命中次数
STAT delete_misses 5 delete未命中次数
STAT delete_hits 1 delete命中次数
STAT incr_misses 0 incr未命中次数
STAT incr_hits 0 incr命中次数
STAT decr_misses 0 decr未命中次数

  • memcached简介
    Memcache是一个高性能的分布式的内存对象缓存系统,通过在内存里维护一个统一的巨大的hash表,它能够用来存储各种格式的数据,包括图像、视频、文件以及数据库检索的结果等。简单的说就是将数据调用到内存中,然后从内存中读取,从而大大提高读取速度。

    在中型网站中的应用
    使用Memcache的网站一般流量都是比较大的,为了缓解数据库的压力,让Memcache作为一个缓存区域,把部分信息保存在内存中,在前端能够迅速的进行存取。那么一般的焦点就是集中在如何分担数据库压力和进行分布式,毕竟单台Memcache的内存容量的有限的。我这里简单提出我的个人看法,未经实践,权当参考。
    [分布式应用]
    Memcache本来支持分布式,我们客户端稍加改造,更好的支持。我们的key可以适当进行有规律的封装,比如以user为主的网站来说,每个用户都有UserID,那么可以按照固定的ID来进行提取和存取,比如1开头的用户保存在第一台Memcache服务器上,以2开头的用户的数据保存在第二台Mecache服务器上,存取数据都先按照UserID来进行相应的转换和存取。
    但是这个有缺点,就是需要对UserID进行判断,如果业务不一致,或者其他类型的应用,可能不是那么合适,那么可以根据自己的实际业务来进行考虑,或者去想更合适的方法。
    [减少数据库压力]
    这个算是比较重要的,所有的数据基本上都是保存在数据库当中的,每次频繁的存取数据库,导致数据库性能急剧下降,无法同时服务更多的用户,比如MySQL,特别频繁的锁表,那么让Memcache来分担数据库的压力吧。我们需要一种改动比较小,并且能够不会大规模改变前端的方式来进行改变目前的架构。

    ---------------------------------------------开始安装----------------------------------------------

    解决依赖:

    1yum install zlib-* zlib*


    安装libevent(memcached对此软件依赖很多,一定要安装)

    1wget https://github.com/downloads/libevent/libevent/libevent-1.4.11-stable.tar.gz12./configure --prefix=/usr/local/libevent make && make install

    安装memcached

    1wget http://memcached.googlecode.com/files/memcached-1.4.15.tar.gz1234./configure -prefix=/usr/local/memcached --with-libevent=/usr/local/libevent #p#分页标题#e#make && make install export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/usr/local/libevent/lib ln -s /usr/local/libevent/lib/libevent* /lib64/

    启动memcached服务端

    1/usr/local/memcached/bin/memcached -d -m 128 -l 127.0.0.1 -p 11211 -u root


    启动参数详解:
    -d选项是启动一个守护进程-m是分配给Memcache使用的内存数量,单位是MB,我这里是128MB
    -u是运行Memcache的用户,我这里是root
    -l是监听的服务器IP地址,如果有多个地址的话,这里指定了服务器的IP地址127.0.0.1
    -p是设置Memcache监听的端口,这里设置了11211,最好是1024以上的端口,这里使用默认端口11211
    -c选项是最大运行的并发连接数,默认是1024,按照你服务器的负载量来设定
    -P是设置保存Memcache的pid文件,这里是保存在/var/run/memcached.pid


    memcached的启动和关闭:
    启动:

    1/usr/local/memcached/bin/memcached -d -m 128 -l 127.0.0.1 -p 11211 -u root -P /var/run/memcached.pid

    关闭:

    1killall -9 memcached 或者 kill `cat /var/run/memcached.pid`

    实时取得stats数据:

    1echo stats | nc 127.0.0.1 11211

    循环实时状态:

    1watch “echo stats | nc 127.0.0.1 11211

    测试memcached安装启动成功

    1telnet 127.0.0.1 11211

    输入

    1stats

    退出telnet:ctrl+]然后输入quit


    ---------------------------------------服务端安装完成-----------------------------------------#p#分页标题#e#

    让php支持memcached安装memcache

    12wget http://pecl.php.net/get/memcache-2.2.7.tgz cd memcache-2.2.71/usr/local/php/bin/phpize12./configure -enable-memcache --with-php-config/usr/local/php/bin/php-config --with-zlib-dir make && make install

    添加模块:

    安装完成后会有提示内容:

    Installingsharedextensions:/usr/local/php/lib/php/extensions/no-debug-zts-20100525/

    1vim /usr/local/php/etc/php.ini

    修改php.ini中的extension_dir=“./”如果没有就新增加


    添加以下内容(大约在730行):
    #extension_dir参数后面的地址,打开该目录看是否存在memcache.so

    12extension_dir = "/usr/local/php/lib/php/extensions/no-debug-zts-20100525/"extension=memcache.so


    重启apache:

    1/usr/local/apache/bin/httpd -k restart

    验证php-m是否支持了memcache:

    1/usr/local/php/bin/php -m | grep memcache

    出现memcache即可!


    --------------------------------php支持memcache模块配置完成----------------------------------

    第一款图形监控工具

    解压软件并且转移至网站根目录(注意权限和php.ini里面的open_basedir这个选项):

    12345wget http://www.junopen.com/memadmin/memadmin-1.0.12.tar.gz tar -zxvf memadmin-1.0.12.tar.gz mv memadmin /usr/local/apache/html/ cd memadmin vim config.php

    在里面修改帐号密码(默认:admin,admin)

    http://127.0.0.1/memadmin/index.php

    添加memcached服务器:

    开始管理:


    第二款监控软件memcache.php

    123wget http:#p#分页标题#e#//livebookmark.net/memcachephp/memcachephp.zip unzip memcachephp.zip vim memcache.php

    修改帐号和密码(默认:memcache,password)
    我的改成了root123456

    注意此处要修改成你的memcached的服务器ip:
    #$MEMCACHE_SERVERS[]='mymemcache-server2:11211';//addmoreasanarray
    改成
    $MEMCACHE_SERVERS[]='你的memcached的IP:11211';

    我的
    $MEMCACHE_SERVERS[]='127.0.0.1:11211';//addmoreasanarray

    http://127.0.0.1/memcache.php

    输入帐号和密码即可看到界面:

    第三款监控软件:

    memcached-tool
    #memcached-tool
    Usage:memcached-tool<host[:port]>[mode]

    memcached-tool10.0.0.5:11211display#showsslabs
    memcached-tool10.0.0.5:11211#same.(defaultisdisplay)
    memcached-tool10.0.0.5:11211stats#showsgeneralstats
    memcached-tool10.0.0.5:11211dump#dumpskeysandvalue

    ---------------------------------memcached监控部分至此完成-------------------------------------

    写个测试文件:

    1vim /usr/local/apache/html/test.php1234567<?php $mem = new Memcache; $mem->connect("127.0.0.1", 11211); $mem->set('key', 'This is a test!', 0, 60); $val = $mem->get('key'); echo $val; ?>

    测试截图:
    http://127.0.0.1/test.php

    看到Thisisatest!测试成功#p#分页标题#e#


    然后看看监控页面是不是有数值的变化了??如果你的和我的一样有了数值的变化被监控到了恭喜你!!!成功了!
    ------------------------------至此php支持memcache模块安装完成-------------------------------------

    安装过程中可能发生的错误:

    1)没有phpize:
    解决方法:
    centos是默认没有安装php-devel的

    1yum install php-devel

    2)make:***[memcache.lo]Error1
    没有安装zlib,我的php-m里面也确实存在zlib的支持,最后是换了版本得到的解决。从3.X版本降到2.2.7版本

    1yum install zlib-devel

    3)PHPWarning:date():Itisnotsafetorelyonthesystem'stimezonesettings.Youare*required*tousethedate.timezonesettingorthedate_default_timezone_set()function.Incaseyouusedanyofthosemethodsandyouarestillgettingthiswarning,youmostlikelymisspelledthetimezoneidentifier.Weselectedthetimezone'UTC'fornow,butpleasesetdate.timezonetoselectyourtimezone.in/usr/local/apache2/htdocs/memcache.phponline726

    没有设置php里面的zone.time,我设置在了配置文件的本身

    4)PHPWarning:session_start():open_basedirrestrictionineffect.File(/tmp)isnotwithintheallowedpath(s):(./tmp:/usr/local/apache/htdocs)in/usr/local/apache/htdocs/memadmin/include/class/memadmin.class.phponline75

    找到open_basedir=这行加上/usr/local/apache/htdocs/memadmin目录即可解决问题。

    -------------------------------------错误排除至此完成------------------------------------------

    ------------------------------以下内容摘自网络,未经实验仅供参考---------------------------------

    memcached的stats

    通过stats命令分析Memcached的内部状态收藏
    Memcached有个stats命令,通过它可以查看Memcached服务的许多状态信息。使用方法如下:
    先在命令行直接输入telnet主机名端口号,连接到memcached服务器,然后再连接成功后,输入stats命令,即可显示当前memcached服务的状态信息。
    比如在我本机测试如下:
    stats
    STATpid1552
    STATuptime3792
    STATtime1262517674
    STATversion1.2.6
    STATpointer_size32
    STATcurr_items1
    STATtotal_items2
    STATbytes593
    STATcurr_connections2
    STATtotal_connections28
    STATconnection_structures9
    STATcmd_get3
    STATcmd_set2
    STATget_hits2
    STATget_misses1
    STATevictions0
    STATbytes_read1284
    STATbytes_written5362
    STATlimit_maxbytes67108864
    STATthreads1
    END
    这里显示了很多状态信息,下边详细解释每个状态项:
    1.pid:memcached服务进程的进程ID
    2.uptime:memcached服务从启动到当前所经过的时间,单位是秒。#p#分页标题#e#
    3.time:memcached服务器所在主机当前系统的时间,单位是秒。
    4.version:memcached组件的版本。这里是我当前使用的1.2.6。
    5.pointer_size:服务器所在主机操作系统的指针大小,一般为32或64.
    6.curr_items:表示当前缓存中存放的所有缓存对象的数量。不包括目前已经从缓存中删除的对象。
    7.total_items:表示从memcached服务启动到当前时间,系统存储过的所有对象的数量,包括目前已经从缓存中删除的对象。
    8.bytes:表示系统存储缓存对象所使用的存储空间,单位为字节。
    9.curr_connections:表示当前系统打开的连接数。
    10.total_connections:表示从memcached服务启动到当前时间,系统打开过的连接的总数。
    11.connection_structures:表示从memcached服务启动到当前时间,被服务器分配的连接结构的数量,这个解释是协议文档给的,具体什么意思,我目前还没搞明白。
    12.cmd_get:累积获取数据的数量,这里是3,因为我测试过3次,第一次因为没有序列化对象,所以获取数据失败,是null,后边有2次是我用不同对象测试了2次。
    13.cmd_set:累积保存数据的树立数量,这里是2.虽然我存储了3次,但是第一次因为没有序列化,所以没有保存到缓存,也就没有记录。
    14.get_hits:表示获取数据成功的次数。
    15.get_misses:表示获取数据失败的次数。
    16.evictions:为了给新的数据项目释放空间,从缓存移除的缓存对象的数目。比如超过缓存大小时根据LRU算法移除的对象,以及过期的对象。
    17.bytes_read:memcached服务器从网络读取的总的字节数。
    18.bytes_written:memcached服务器发送到网络的总的字节数。
    19.limit_maxbytes:memcached服务缓存允许使用的最大字节数。这里为67108864字节,也就是是64M.与我们启动memcached服务设置的大小一致。
    20.threads:被请求的工作线程的总数量。这个解释是协议文档给的,具体什么意思,我目前还没搞明白。
    总结:stats命令总体来说很有用,通过这个上命令我们很清楚当前memcached服务的各方面的信息。除此之外,我还没有其他方法可以知道这些状态信息。可能还有其他途径,可能我对memcached组件还不太熟悉吧。

    -----------------------------------------一些简单用法--------------------------------------------

    下面是一些简单用法:
    Memcache::add//添加一个值,如果已经存在,则返回false
    Memcache::addServer//添加Memcache地址
    Memcache::close//关闭一个Memcache的连接
    Memcache::connect//打开一个到Memcache的连接
    Memcache::decrement//对保存的某个key中的值进行减法操作
    Memcache::delete//删除一个Memcache上的key值
    Memcache::flush//刷新所有Memcache上保存的项目(类似于删除所有的保存的项目)#p#分页标题#e#
    Memcache::get//从Memcache上获取一个key值
    Memcache::getExtendedStats//获取进程池中所有进程的运行系统统计
    Memcache::getServerStatus//获取运行服务器的参数
    Memcache::getStats//获取当前Memcache服务器运行的状态
    Memcache::getVersion//返回运行的Memcache的版本信息
    Memcache::increment//对保存的某个key中的值进行加法操作
    Memcache::pconnect//打开一个到Memcache的长连接
    Memcache::replace//替换一个已经存在Memcache服务器上的项目(功能类似Memcache::set)
    Memcache::set//向Memcache添加一个值,如果已经存在,则覆写
    Memcache::setCompressThreshold//对大于某一大小的数据进行压缩
    Memcache::setServerParams//在运行时修改服务器的参数

    实例(仅供参考):

    ------------------------------------------------------------


    <?php $mem = new Memcache; $mem->connect("127.0.0.1", 11211); //Memcache::set方法有四个参数,第一个参数是key,第二个参数是value,第三个参数可选,表示是否压缩保存,第四个参数可选,用来设置一个过期自动销毁的时间。 $mem->set('test','123',0,60); //Memcache::add方法的作用和Memcache::set方法类似,区别是如果 Memcache::add方法的返回值为false,表示这个key已经存在,而Memcache::set方法则会直接覆写。 $mem->add('test','123',0,60); //Memcache::get方法的作用是获取一个key值,Memcache::get方法有一个参数,表示key。 $mem->get('test');//输出为'123' //Memcache::replace 方法的作用是对一个已有的key进行覆写操作,Memcache::replace方法有四个参数,作用和Memcache::set方法的相同。 $mem->replace('test','456',0,60); //Memcache::delete方法的作用是删除一个key值,Memcache::delete方法有两个参数,第一个参数表示key,第二个参数可选,表示删除延迟的时间。 $mem->delete('test',60); ?>

  • 相关推荐:

  • 利用memcached+三款缓存监
  • 尝试使用Memcached遇到的狗
  • 用memcached实现session共享
  • memcachedsessionmanager教程实
  • Memcached完全剖析–1.mem
  • Memcached全面剖析–2.理解
  • Memcached全面剖析–3.mem
  • Memcached全面剖析–5.mem
  • Memcached全面剖析–4.mem
  • memcached与.NET的融合使用
  • 网站内容禁止违规转载,转载授权联系中国云计算网