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

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


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

查看所有标签

猜你喜欢:

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

Ordering Disorder

Ordering Disorder

Khoi Vinh / New Riders Press / 2010-12-03 / USD 29.99

The grid has long been an invaluable tool for creating order out of chaos for designers of all kinds—from city planners to architects to typesetters and graphic artists. In recent years, web designers......一起来看看 《Ordering Disorder》 这本书的介绍吧!

CSS 压缩/解压工具
CSS 压缩/解压工具

在线压缩/解压 CSS 代码

HTML 编码/解码
HTML 编码/解码

HTML 编码/解码

HSV CMYK 转换工具
HSV CMYK 转换工具

HSV CMYK互换工具