Chinaunix首页 | 论坛 | 博客
  • 博客访问: 603283
  • 博文数量: 244
  • 博客积分: 0
  • 博客等级: 民兵
  • 技术积分: 130
  • 用 户 组: 普通用户
  • 注册时间: 2016-06-27 09:53
个人简介

记录学习,记录成长

文章分类

全部博文(244)

我的朋友

分类: LINUX

2016-03-25 18:59:27

一.理解Memcache  Memcached  memcache和memcached
1.一般而言,服务器端成为Memcache,其守护进程为Memcached,而memcache和memcached是Memcached的PHP扩展,这样来命名称呼比较方便理解记忆;


2.虽然可以以telnet的方式登录Memcached但是却很少这样用,而Memcached有一个特点就是其功能的实现一半依赖于客户端,一半基于服务器端(客户端负责发送存储项至服务器端、从服务端获取数据以及无法连接至服务器时采用相应的动作;服务端负责接收、存储数据,并负责数据项的超时过期),所以需要调用Memcached的API,Memcached的功能够才能生效,所以要了解一下服务器端和客户端;


3.服务器端:
Memcacche是是一款开源、高性能、分布式内存对象缓存系统,而Memcached是Memcache缓存系统的主程序文件(守护进程名字就是memcached),所以服务器端只有一个那就是Memcache;


4.客户端:
目前有两个著名的用c语言的库实现了操作服务端:libmemcache和libmemcached(先有libmemcache库,后面才发展了libmemcached库)它们是两个不同的客户端库;


关于libmemcached库介绍:
libMemcached is an open source C/C++ client library and tools for the memcached server .It has been designed to be light on memory usage, thread safe, and provide full access to server side methods.



PHP也有两个Memcached客户端即memcache和memcached,这两个扩展的本质区别是封装的库(C语言库)不同,一个是libmemcache库另一个是libmemcached库。而且,由于PHP扩展也是用C/C++写的,所以编译安装这两个扩展要先安装对应的C语言库;


PHP的Memcache客户端说明:
memcache:Memcached is a caching daemon designed especially for dynamic web applications to decrease database load by storing objects in memory.This extension allows you to work with memcached through handy OO and procedural interfaces.



memcached:This extension uses libmemcached library to provide API for communicating with memcached servers.



或者PHP官方文档介绍:



php的memcache扩展和memcached扩展的区别(摘自网络):
(1)基于的库不同(我觉得这是本质区别,库的不同决定了后续差异)。memcache扩展是原生的(基于pecl扩展库)。memcached扩展是基于libmemcached库开发的,所以支持cas操作,cas操作就是多个线程并发修改同一个key的值的时候能够进行处理。
memcache.so和memcached.so是两个扩展文件名称(php中扩展在linux下是.so后缀,window下是dll文件)。也就是后者就要libmemcached库来实现。

(2)memcache支持面向对象和面向过程两套接口操作服务端。而memcached扩展只支持面向对象方式操作。这也是库(libmemcached与libmemcache)的不同影响的。

(3)memcached支持BinaryProtocol而memcache不支持。还是库的不同导致。这意味着memcached会有更高的性能。
通过$m->setOption(Memcached::OPT_BINARY_PROTOCOL,true)设置二进制协议。
ps:理论上二进制解码速度快于文本,但实际优势微乎其微。且目前大部分用户还是使用文本协议,比较简单稳定。实践中使用二进制的还是比较少。

二.安装PHP的memcache扩展
配置环境:
Nginx+php+PHP的memcache扩展:192.168.85.128
Memcache服务器端:192.168.85.156

1.安装Memcache服务器端
上次是编译安装的,这次为了节约时间采用RPM的方式安装;
[root@localhost ~]# yum install libevent -y

[root@localhost ~]# yum install memcached -y

memcached默认安装的文件:
[root@localhost ~]# rpm -ql memcached
/etc/rc.d/init.d/memcached
/etc/sysconfig/memcached
/usr/bin/memcached
/usr/bin/memcached-tool
/usr/share/doc/memcached-1.4.4
/usr/share/doc/memcached-1.4.4/AUTHORS
/usr/share/doc/memcached-1.4.4/CONTRIBUTORS
/usr/share/doc/memcached-1.4.4/COPYING
/usr/share/doc/memcached-1.4.4/ChangeLog
/usr/share/doc/memcached-1.4.4/NEWS
/usr/share/doc/memcached-1.4.4/README
/usr/share/doc/memcached-1.4.4/protocol.txt
/usr/share/doc/memcached-1.4.4/readme.txt
/usr/share/doc/memcached-1.4.4/threads.txt
/usr/share/man/man1/memcached.1.gz
/var/run/memcached

启动memcached:
[root@localhost ~]# service memcached start

[root@localhost ~]# netstat -untlp | grep :11211
tcp        0      0 0.0.0.0:11211               0.0.0.0:*                   LISTEN      3448/memcached      
tcp        0      0 :::11211                    :::*                        LISTEN      3448/memcached      
udp        0      0 0.0.0.0:11211               0.0.0.0:*                               3448/memcached      
udp        0      0 :::11211                    :::*                                    3448/memcached      

其启动时的参数为(可更改这些参数):
[root@localhost ~]# cat /etc/sysconfig/memcached
PORT="11211" #监听端口
USER="memcached" #以哪个用户的身份启动
MAXCONN="1024" #最大连接数
CACHESIZE="64" #缓存大小
OPTIONS=""

本地连接memcached测试:
[root@localhost ~]# telnet 127.0.0.1 11211
Trying 127.0.0.1...
Connected to 127.0.0.1.
Escape character is '^]'.
add mykey 0 30 2
Hi
STORED
get mykey
VALUE mykey 0 2
Hi
END
quit
Connection closed by foreign host.
一切都没有问题说明memcached已经安装成功了;

2.安装PHP的memcache扩展memcache
[root@localhost ~]# tar xf memcache-3.0.8.tgz 
[root@localhost ~]# cd memcache-3.0.8

然后执行phpize命令让PHP识别该模块:
[root@localhost memcache-3.0.8]# /etc/php/bin/phpize
Configuring for:
PHP Api Version:         20131106
Zend Module Api No:      20131226
Zend Extension Api No:   220131226

编译安装memcache:
[root@localhost memcache-3.0.8]# ./configure --with-php-config=/etc/php/bin/php-config --enable-memcache

[root@localhost memcache-3.0.8]# make

[root@localhost memcache-3.0.8]# make install
Installing shared extensions:     /etc/php/lib/php/extensions/no-debug-non-zts-20131226/

然后编辑php.ini文件,找到编辑或直接添加extension选项的值为memcache.so的路径:
[root@localhost memcache-3.0.8]# vim /etc/php/etc/php.ini
extension = /etc/php/lib/php/extensions/no-debug-non-zts-20131226/memcache.so

最后重启php-fpm:
[root@localhost ~]# kill 9101
 
[root@localhost ~]# /etc/php/sbin/php-fpm -c  /etc/php/etc/php.ini

[root@localhost ~]# ps -ef | grep php-fpm
root     12506     1  0 21:15 ?        00:00:00 php-fpm: master process (/etc/php/etc/php-fpm.conf)
www      12507 12506  0 21:15 ?        00:00:00 php-fpm: pool www    
www      12508 12506  0 21:15 ?        00:00:00 php-fpm: pool www    
root     12510  9500  0 21:15 pts/0    00:00:00 grep php-fpm

查看是否已经安装了memcahe模块:
[root@localhost html]# cat index.php 
        echo phpinfo();
?>



创建测试页面:
[root@localhost html]# pwd
/etc/nginx/html
[root@localhost html]# cat test.php 
$mem = new Memcache;
$mem->connect("192.168.85.156", 11211)  or die("Could not connect");

$version = $mem->getVersion();
echo "Server's version: ".$version."
\n";

$mem->set('hellokey', 'Hello World', 0, 600) or die("Failed to save data at the memcached server");
echo "Store data in the cache (data will expire in 600 seconds)
\n";

$get_result = $mem->get('hellokey');
echo "$get_result is from memcached server.";         
?>



如果出现Hello World is from memcached server则说明客户端已经安装成功;


三.客户端工具
1.php的memcache扩展的图形化工具memcachephp(解压在192.168.85.128主机上)
下载地址:

memcachephp是一款memcache图形界面的监控工具,可以通过这个工具查看到局域网内所有部署memcache机器或者端口的memcache的运行情况,对我们监控memcache的缓存命中率、cache利用率、点击率等信息有很好的帮助作用;

[root@localhost ~]# unzip memcachephp-master.zip

[root@localhost ~]# ls memcachephp-master
LICENSE  memcache.php  README.md

[root@localhost ~]# mv memcachephp-master/memcache.php /etc/nginx/html/

然后编辑memcache.php文件
define('ADMIN_USERNAME','memcache');    // 登录的用户名
define('ADMIN_PASSWORD','password');    // 登录的密码
$MEMCACHE_SERVERS[] = '172.168.85.156:11211'; // Memcache服务器端地址

测试:
输入用户名和密码后显示



2.memcached-tool  (192.168.85.156即Memcache服务端主机上)
除了使用telnet的方式外,还可以使用监测memcached运行情况的工具memcached-tool
用法:
[root@localhost ~]# memcached-tool
Usage: memcached-tool [mode]
       memcached-tool 10.0.0.5:11211 display    # shows slabs
       memcached-tool 10.0.0.5:11211            # same.  (default is display)
       memcached-tool 10.0.0.5:11211 stats      # shows general stats
       memcached-tool 10.0.0.5:11211 dump       # dumps keys and values

例如:
[root@localhost ~]# memcached-tool 127.0.0.1:11211
  #  Item_Size  Max_age   Pages   Count   Full?  Evicted Evict_Time OOM
  1      80B     87713s       1       1      no        0        0    0


3.MemAdmin
memcached提供了stats这个命令可以查看memcached相关状态,但是不是很详细,这就需要用到MemAdmin了;
MemAdmin是一款可视化的Memcached管理与监控工具,使用PHP开发,体积小,操作简单。

主要功能:
            服务器参数监控:STATS、SETTINGS、ITEMS、SLABS、SIZES实时刷新

            服务器性能监控:GET、DELETE、INCR、DECR、CAS等常用操作命中率实时监控

            支持数据遍历,方便对存储内容进行监视

            支持条件查询,筛选出满足条件的KEY或VALUE

            数组、JSON等序列化字符反序列显示

            兼容memcache协议的其他服务,如Tokyo Tyrant (遍历功能除外)

            支持服务器连接池,多服务器管理切换方便简洁

下载地址:

解压到网站网页目录下:
[root@localhost ~]# tar xf memadmin-1.0.12.tar.gz -C /etc/nginx/html/

打开config.php文件设置如密码等相关信息:
[root@localhost html]# vim memadmin/config.php
$config['user'] = "admin";       // your username
$config['passwd'] = "admin";  // your password

通过浏览器访问:


点击开始管理,这里有更详细的监控信息和更多功能:



阅读(2323) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~