PHP与Memcached

栏目: 数据库 · Memcache · 发布时间: 6年前

内容简介:PHP与Memcached

Memcached是一个开源、高性能且支持分布式的内存数据库系统,其以key-value的键值对方式存储数据于内存之中,存储的值可以是任何字符串或者对象,另外它提供了精简的API,可对接不同的开发语言。由于 Memcached 使用了内存作为数据存储容器,性能非常高效,被广泛应用于缓存方案中。当然类似的数据库还有Redis。本次内容主要介绍利用 Docker 部署Memcached以及Memcached与本地 PHP 的对接技巧。

在Docker中部署Memcached

本次的实验环境是在Windows 10系统下完成,由于Memcached原本就是在 Linux 运行的,虽然也有Windows版本,但是不太好,所以我选择了用Docker来部署。前一篇介绍Docker的文章已经大概讲解了怎样在Windows中安装Docker,但稍微有点区别,本次我使用的Docker为 Docker for Windows ,安装方式比 Docker ToolBox 要简单,也是官方推荐使用的Windows下的Docker解决方案。具体的安装方法可以到官方下载 Docker for Windows CE ,像普通软件一样安装就行了,安装完成需要开启Windows的 Hyper-V 虚拟机才可以使用,如果您的操作系统没有 Hyper-V ,就没法支持。具体的安装步骤就略了。

首先我们需要拉取Memcached镜像到本地,这次我选择了网易蜂巢镜像中心 http://c.163.com ,当然也可以选daocloud的镜像市场。在网易蜂巢中心搜索 memcached ,之后我们可以提到官方提供的镜像拉取地址,我选择了最新版本

PHP与Memcached

docker pull hub.c.163.com/library/memcached:latest

将拉取命令复制到命令行中执行,等待镜像下载完成。镜像下载完成后,我们可以用 docker images 命令来查看本地镜像,可以看到memcached的镜像已经在列表之中了。

PS C:\Users\sunfl> docker images
REPOSITORY                        TAG                 IMAGE ID            CREATED             SIZE
daocloud.io/library/nginx         latest              5766334bdaa0        2 weeks ago         183 MB
hub.c.163.com/library/memcached   latest              deb4e908c6ae        5 weeks ago         83.1 MB

PHP与Memcached

之后我们可以尝试着启动一个运行memcached的容器进行链接测试。

docker run -d -p 11211:11211 hub.c.163.com/library/memcached -m 64

以上命令的意思是启动一个hub.c.163.com/library/memcached的容器,把容器的端口映射到本地的11211端口,这样本地就能访问到memcached了, -d 表示后台运行, -m 指定分配给memcached的内存数量,以MB为单位。

运行成功之后docker会返回容器的id。

由于我使用的是Windows操作系统,在Windows下访问Memcached可以使用telnet客户端,Windows10的telnet客户端默认是关闭的,我们可以在 控制面板 - 程序 - 卸载程序 - 打开或关闭Windows功能 中找到 Telnet 客户端勾选并确认。

打开cmd命令行窗口,使用 telnet 连接docker容器中的memcached。

telnet 127.0.0.1 11211

按下回车键,如果连接成功,telnet就会进入空白(没有字的纯黑界面也是空白-_-)的界面等待用户输入命令。连接成功后随便输入一条存储数据的命令测试:

set key 0 1000 10
memcached
STORED
get memcached
END
get key
VALUE key 0 4
test
END

我们在上面输入了 set key 0 1000 10 意思是设置一个key为 key 的键,超时时间为1000秒,字节大小为10。回车之后,memcached等待用户输入值,这里输入 memcached 作为值,再次回车,如果保存成功,终端会输出 STORED ,否则输出 ERROR ,取值的命令则是通过 get KEY的值 来获取key对应的值,可以使用 quit 断开连接。到此算是测试成功了,具体的Memcached命令就不再多讲。

PHP的Memcache扩展安装

PHP并不是默认支持Memcached,我们需要为它安装Memcache扩展才能正常连接Memcache。

下载扩展可以到PHP扩展官方pecl下载,Memcached扩展的下载地址为 http://pecl.php.net/package/memcache 需要根据自己的PHP环境选择。

扩展的选择一般需要看PHP构建的环境,比如编译平台、64位还是32位和是否线程安全等。

如何查看这些信息呢?可以通过 phpinfo() 函数输出的信息查看

PHP与Memcached

根据以上的信息,我选择了基于VC11编译、64位平台且是线程安全的版本,TS代表线程安全(Thread Safety)。

PHP与Memcached

把下载好的扩展解压可以看到里面有一个动态链接库文件 php_memcache.dll 这就是Windows下的php扩展。复制放到PHP目录下的ext文件夹,然后在php.ini配置文件中开启扩展声明。

PHP与Memcached

我用到是WAMPServer集成环境,可以通过它来跳转到PHP的配置文件,在配置文件中添加如下声明:

extension=php_memcache.dll

之后需要重启apache重新加载PHP才能是扩展生效。配置完成之后,我们用 phpinfo() 函数输出查看扩展是否已经安装成功,如果出现了memcache,说明安装非常顺利。

测试

折腾了那么久,让我们来写几句php的代码操作一下Memcached吧。

<?php
//实例化Memcache对象
$mem  =new Memcache();
//连接Memcached服务器,失败返回false
$mem->connect('127.0.0.1', '11211') or die('Connected failed!');
//存储一个值
$mem->set('k_name', 'oopsguy');
//取出并输出一个值
echo $mem->get('k_name');
//删除数据
$mem->delete('k_name');
//验证值数据是否存在
var_dump($mem->get('k_name'));
//关闭连接
$mem->close();

以上是一个简单php操作Memcached代码,跟多的API可以参照PHP官方文档。

让我们开看看输出结果是否符合预期:

oopsguy
E:\wamp64\www\memcached.php:13:boolean false

完全没问题。

但这样的还不够,我们需要在PHP中设置存储数据,让后通过telnet客户端查看对应的数据是否存在。

<?php
$mem  =new Memcache();
$mem->connect('127.0.0.1', '11211') or die('Connected failed!');
$mem->set('k_name', 'oopsguy');
$mem->close();

执行之后,进入telnet终端查看数据是否存在:

PHP与Memcached

可以看到终端获取到了数据。


以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持 码农网

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

启示录

启示录

[美] Marty Cagan / 七印部落 / 华中科技大学出版社 / 2011-5 / 36.00元

为什么市场上那么多软件产品无人问津,成功的产品凤毛麟角?怎样发掘有价值的产品?拿什么说服开发团队接受你的产品设计?如何将敏捷方法融入产品开发?过去二十多年,Marty Cagan作为高级产品经理人为多家一流企业工作过,包括惠普、网景、美国在线、eBay。他亲历了个人电脑 、互联网、 电子商务的起落沉浮。《启示录:打造用户喜爱的产品》从人员、流程、产品三个角度介绍了现代软件(互联网)产品管理的实践经......一起来看看 《启示录》 这本书的介绍吧!

JS 压缩/解压工具
JS 压缩/解压工具

在线压缩/解压 JS 代码

MD5 加密
MD5 加密

MD5 加密工具

UNIX 时间戳转换
UNIX 时间戳转换

UNIX 时间戳转换