【Memcache】Linux和Windows下Memcache服务端和客户端(PHP)的安装【原创】

目录

参考

一、概要

二、服务端

1. Linux 安装

2. Windows 安装

三、客户端-PHP

1. Linux 安装

2. Windows 安装

3. PHP测试Memcached


参考

《PHP核心技术与最佳实践》的第9章:Memcached使用与实践

Memcached官网

Memcached的Github地址

在 Windows 10 64 下安装 Memcached,安装 PHP 7.0.22 的 Memcache 扩展

PHP5的Memcache扩展下载地址

PHP7的Windows的memcache扩展Github地址

 

一、概要

随着互联网的发展,特别是Web网站的兴起,传统的关系型数据库(MySQL、Oracle等)开始出现瓶颈,很多方面不能满足我们的要求。

比如:

  • 对数据库的高并发读写:关系型数据库在处理过程非常复杂和耗时(如解析SQL语句、事务处理等),如果对关系型数据库进行高并发读写(每秒上万次的访问),那么关系型数据库是无法承受的
  • 对海量数据的处理:对于一些高流量网站来说,每天有上千万的数据产生(如微博),对于关系型数据库,如果在一个有上亿条数据的数据表中查找某条记录,效率会很低

 

对于这种情况,如果是使用Redis或者是Memcached就能很好的解决以上问题。

这里对Redis不做讨论,只讨论Memcache。

Memcache 是一款开源、高性能、分布式内存对象缓存系统,可应用各种需要缓存的场景,其主要目的是通过降低对Database的访问来加速web应用程序。

Memcache 把从数据库中读取到的数据暂存在内存中,等下次访问同样数据时,直接从Memcache中读取。因为Memcache中的数据存放在内存中,所以访问速度特别快,但重要数据最好保存在数据库或硬盘上,防止断电后Memcache数据丢失。

 

通俗的理解呢,Memcache其实是只有一张表的数据库,数据库只有两个字段,一个是key主键,一个是value值

 

Memcache分为服务端和客户端

 

二、服务端

Memcache 服务端有两个,一个是 Memcache 另一个是 Memcached ,后者比前者要新,功能也比较多,另外Memcache已经停止更新了,所以一般都是用Memcached作为服务端的

 

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

  • 协议简单:Memcached的服务器客户端通信并不使用复杂的XML等格式,而是使用简单的基于文本的协议
  • 基于libevent的事件处理:libevent是个程序库,将Linux的epoll、BSD类操作系统的kueue等时间处理封装成统一的接口。Memcached使用这个libevent库,因此在Linxu、BSD、Solaris等操作系统上发挥其高性能
  • 内置内存存储方式:为了提高性能,Memcached中保存的数据都存储在内置的内存存储空间中。由于数据仅存在内存中,因此重启操作系统会导致全部数据消失。另外,内容容量达到指定的值之后Memcached会自动删除不使用的缓存
  • Memcached不互相通信的分布式:Memcached尽管是分布式缓存服务器,但服务端并没有分布式功能,各个Memcached不会互相通信以共享信息,它的分布式主要是通过客户端来实现的

 

如图:

 

Memcached 以守护进程的方式运行于一个或多个服务器中,随时接受来自客户端的连接操作,客户端可以由各种语言编写,如Perl、PHP、Python、Ruby、Java、C等。客户端在与Memcached服务建立连接之后,接下来的事情就是存取对象了。每个被存储的对象都有一个唯一标识符key与之相关联,通过key可以对对象进行存取操作。保存在Memcached的对象实际上是放置在内存中,这也是Memcached如此高效快速的原因了。

 

官网地址:https://memcached.org

Github地址:https://github.com/memcached/memcached/

 

截至目前为止(2019-10-26),Memcached的最新稳定版本为:1.5.19

 

注意:Windows版本没有官方支持,但还是可以使用其他方法进行下载安装的

 

1. Linux 安装

这里以Centos7作为例子

 

A. 安装libevent-dev

由于Memcached 依赖于 libevent库,所以必须先安装 libevent-dev

yum -y install libevent-devel

 

B. 安装Memcached

安装Memcached有两种方式:

  • 编译安装
  • 使用依赖管理工具yum、apt-get等(推荐)

 

编译安装:

# 下载memcached(可以通过官方下载地址查看最新稳定版本链接:https://memcached.org/downloads)
wget https://memcached.org/files/memcached-1.5.19.tar.gz

# 解压缩
tar -zxvf memcached-1.5.19.tar.gz

# 编译安装
cd memcached-1.5.19
./configure --prefix=/usr/local/memcached
make && make install

编译的时候,如果不指定安装位置的话,默认是安装在/usr/local/bin下面的,这里修改安装位置为:/usr/local/memcached

 

注意:如果是编译安装的话,建议是安装完成之后使用systemctl来管理Memcached服务:

新增Memcached服务

vim /usr/lib/systemd/system/memcached.service :

[Unit]
Description=Memcached
Before=httpd.service
After=network.target

[Service]
Type=simple
ExecStart=/usr/local/memcached/bin/memcached -u root -p 11211 -m 128 -c 100

[Install]
WantedBy=multi-user.target

然后就可以使用systemctl来进行memcached的管理了

# 启动memcached
systemctl start memcached

# 设置开机启动
systemctl enable memcached

# 查看状态
systemctl status memcached

# 重启服务
systemctl restart memcached

# 停止服务
systemctl stop memcached

 

如果不使用systemctl的话,那么可以使用以下命令来启动:

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

常用启动选项:

  • -d:以守护线程方式运行
  • -l:设置监听的IP地址,如果是本机的话一般不用设置
  • -p:设置监听的端口号,默认为11211
  • -m:设置使用的内存大小,以M为单位
  • -u:指定用户
  • -c:设置最大并发连接数,默认是11211
  • -vv:打印客户端的请求和返回信息,一般用来调试

更多命令可以通过 -h 来查找

 

yum安装:

yum install -y memcached

注意:yum安装完成之后,默认是会使用systemctl来管理memcached服务的

 

C. 验证是否安装成功

# 验证是否安装成功
memcached -h

# 查找安装位置(yum安装方式)
rpm -ql memcached

 

D. 配置文件

注意:只有yum依赖安装的才会生成配置文件,编译安装的话是没有该配置文件的

默认的Memcached配置文件位于:/etc/sysconfig/memcached

PORT="11211"
USER="memcached"
MAXCONN="1024"  
CACHESIZE="64"
OPTIONS=""

参数说明:

**PORT**:Memcached 使用的默认端口。
**USER**:Memcached 的运行用户。
**MAXCONN**:允许连接到 Memcached 的最大数目。可以根据你的需求增加任何数量。
**CACHESIZE**:内存的缓存大小。
**OPTIONS**:命令的后续参数

一般不需要修改

 

E. 开机启动和启动

# 设置开机启动
systemctl enable memcached

# 启动(systemctl启动)
systemctl start memcached

# 手动启动
/usr/local/memcached/bin/memcached -d -m 128 -u root -p 11211 -l 127.0.0.1

验证是否运行:

netstat -tulpn | grep 11211
# 或者
memcached-tool 127.0.0.1 stats

 

F. Telnet连接

可以通过telnet连接memcached服务器进行数据存储,及数据获取

一些简单的操作:

# 查看版本
version

# 设置”key”, <command name> <key> <flags> <exptime> <bytes>
set test 0 0 5

# 输入“value”值,<data block>,字节数与key中的设的“bytes”相同
mymem

# 获取已设的key的数据
get test

# 推出
quit

比如:

[root@www abc]# telnet 127.0.0.1 11211
Trying 127.0.0.1...
Connected to 127.0.0.1.
Escape character is '^]'.
version
VERSION 1.4.15
set test 0 0  5
mymem
STORED
get test
VALUE test 0 5
mymem
END
quit
Connection closed by foreign host.

 

2. Windows 安装

Windows版本没有官方支持,但还是有方法

参考:

http://www.shuijingwanwq.com/2017/09/11/1906/

https://www.runoob.com/Memcached/window-install-memcached.html

 

Github地址:https://github.com/nono303/memcached

在里面下载对应版本的memcached即可

截至目前为止,Windows下的memcached的版本为:1.5.19

 

下载完成之后,在在memcached的目录下的命令行下运行:

memcached.exe -p 11211 -m 150 -u root

命令等同于Linux的命令

 

注意:在memcached 1.4.5版本之前是可以作为服务安装的,即会开启自启动,直接使用管理员权限在memcached的目录下运行:

memcached.exe -d install

然后就可以使用命令来开启和关闭:

memcached.exe -d start
memcached.exe -d stop

但是在1.4.5以及后面的版本就不行了,需要使用任务计划中开启一个普通的进程,在Window启动时设置memcached自动执行。

具体可以参考http://www.shuijingwanwq.com/2017/09/11/1906/

 

三、客户端-PHP

Memcache支持多客户端,如perl,php,Python,c/c++,Java等等,这里主要基于php来进行配置。

 

关于PHP的memcache扩展有两个:

  • memcache
  • memcached(推荐)

 

1. memcache

下载地址:https://pecl.php.net/package/memcache

官方已经停止更新了,最新稳定版本是在2013-04-07发布的3.0.8版本,并且提供了Windows的扩展下载,但只支持到PHP 5.6,不支持PHP7+版本

 

2. memcached

这个扩展相比起memcache来说,支持的函数和协议比memcache多,版本也比较新,并且一直在维护中,功能更加强大,另外呢,memcache这个扩展在分布式读取数据和高并发下的稳定性上都存在一些问题,所以更加推荐使用memcached来作为PHP的扩展

 

下载地址:https://pecl.php.net/package/memcached

Githug地址:https://github.com/php-memcached-dev/php-memcached

 

最新稳定版本为2019-10-06发布的3.1.4版本

 

注意:3.x是支持PHP 7.0 - 7.4,2.x是支持PHP 5.2 - 5.6

 

注意:memcached并不支持Windows平台,如果Windows的PHP想要安装memcache扩展的话,只能安装memcache,如果是PHP 5.6及以下版本的话,去官方下载地址下载即可:https://pecl.php.net/package/memcache,如果是PHP 7的版本的话,需要从这里下载:https://github.com/nono303/PHP7-memcache-dll,这是非官方提供的包,是基于memcache的

 

1. Linux 安装

A. 安装libmemcached

php的memcached扩展是基于libmemcached,所以要先安装libmemcached

目前是1.0.18版本,最新的稳定版本可以查看官网:https://launchpad.net/libmemcached/+download

# 下载libmemcached(可以去官方下载地址看看最新稳定版本:https://launchpad.net/libmemcached/+download)
wget https://launchpad.net/libmemcached/1.0/1.0.18/+download/libmemcached-1.0.18.tar.gz

# 解压
tar -zxvf libmemcached-1.0.18.tar.gz

# 配置安装目录
cd libmemcached-1.0.18/
./configure --prefix=/usr/lib/libmemcached

# 编译安装
make && make install

 

B. 安装memcached

目前的最新稳定版本是3.1.4版本,最新的稳定版本可以查看官网:https://pecl.php.net/package/memcached

# 下载php-memcached(可以去官方下载地址看看最新稳定版本:https://pecl.php.net/package/memcached)
wget https://pecl.php.net/get/memcached-3.1.4.tgz

# 解压
tar zxvf memcached-3.1.4.tgz
cd memcached-3.1.4

#使用phpize来生成configure配置文件
/usr/bin/phpize(可以通过find / -name "phpize"找到自己的phpize路径,如果没有安装phpize的话需要安装yum install -y php-devel)

# 配置
./configure --enable-memcached --with-php-config=/usr/bin/php-config --with-libmemcached-dir=/usr/lib/libmemcached --disable-memcached-sasl

# 编译安装
make && make install

 

C. PHP添加扩展

vim /etc/php.ini

# 增加
extension=memcached.so

 

D. 重启Apache或者是Nginx

# apache
systemctl restart httpd 

# nginx
systemctl restart nginx 

 

E. 验证

php -m | grep memcached

也可以通过访问phinfo页面来验证是否成功

 

2. Windows 安装

注意:Memcached扩展并不支持Windows平台,如果Windows的PHP想要安装memcache扩展的话,只能安装memcache,如果是PHP 5.6及以下版本的话,去官方下载地址下载即可:https://pecl.php.net/package/memcache,如果是PHP 7的版本的话,需要从这里下载:https://github.com/nono303/PHP7-memcache-dll,这是非官方提供的包,是基于memcache的

 

下载

PHP 5.6下载地址:https://pecl.php.net/package/memcache

PHP 7 下载地址:https://github.com/nono303/PHP7-memcache-dll

 

根据PHP版本选择对应的dll,然后放到php的安装目录下的ext目录中

 

设置php.ini

php.ini中增加:

[memcache]
extension = php_memcache.dll

 

重启Apache或者是Nginx

 

验证

php -m | grep memcached

也可以通过访问phinfo页面来验证是否成功

注意:这里是memcache不是memcached

 

3. PHP测试Memcached

vim /var/www/html/test.php

<?php

$mem = new Memcached();
if(!$mem->addServer('127.0.0.1', 11211)){
    die('连接失败!');
}

$mem->set('name','lf');
var_dump($mem->get('name'));

保存之后,浏览器访问,能看到输出了if,然后注释掉$mem->set('name','lf');再去访问,看看能不能输出if,如果ok则正常

也可以telnet进去看:

 

可以看到,是有name的值的,说明是正常的

[root@www php-fpm]# telnet 127.0.0.1 11211
Trying 127.0.0.1...
Connected to 127.0.0.1.
Escape character is '^]'.
get name
VALUE name 0 2
lf
END

注意:如果是Windows下的话,是没有Memcached类的,需要安装memcache扩展,使用:Memcache类,即改成:

<?php
 
$mem = new Memcache;
if (!$mem->connect('127.0.0.1', 11211)) {
    die('连接失败!');
}
$mem->set('name','lf');
var_dump($mem->get('name'));

所以在封装PHP的Memcache类的时候,特别要注意这一点,另外Memcached的方法基本包含了Memcache的方法,可以兼容

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章