内容简介: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
,之后我们可以提到官方提供的镜像拉取地址,我选择了最新版本
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
之后我们可以尝试着启动一个运行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()
函数输出的信息查看
根据以上的信息,我选择了基于VC11编译、64位平台且是线程安全的版本,TS代表线程安全(Thread Safety)。
把下载好的扩展解压可以看到里面有一个动态链接库文件 php_memcache.dll
这就是Windows下的php扩展。复制放到PHP目录下的ext文件夹,然后在php.ini配置文件中开启扩展声明。
我用到是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终端查看数据是否存在:
可以看到终端获取到了数据。
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持 码农网
猜你喜欢:本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。