随着redis使用愈来愈普遍,各类应用系统几乎都会嵌入redis。固然,PHP也不例外。在我接触到的项目中,主要是使用redis做为缓存服务器。可是对于PHP来讲,它自己并不支持redis。因此说这里咱们须要本身作一些事情,是PHP能够链接redis并操做它。php
这里主要有两种方式:一种是经过第三方扩展,另外一种是本身使用socket来封装redis。linux
经过第三方扩展git
目前,对于php操做redis的第三方扩展有不少,咱们在这就拿phpredis为例来介绍。github
固然,按照常规的PHP模块来讲,在安装phpredis扩展以前,若是咱们像其余的模块同样来实例化redis操做对象的话,系统会报找不到redis类的错误redis
<?php $obj = new redis(); var_dump($obj); ?>
错误以下windows
Fatal_error: class redis not found……
从上面咱们也能够看出php默认是不支持redis操做的。缓存
那么咱们接下来就须要本身动手了。服务器
在linux系统下扩展session
首先咱们须要下载,固然在linux上下载第三方应用仍是比较容易的。phpredis的源代码托管在github上,下载地址:https://github.com/phpredis/phpredis.gitsocket
# git clone https://github.com/phpredis/phpredis.git
而后进入该目录
#cd phpredis
对PHP扩展第三方应用,须要借助phpize这个工具,具体步骤以下
# /usr/local/php/bin/phpize //生成编译须要的文件 # ./configure
这个过程可能会出现以下错误
configure: error: Cannot find php-config. Please use --with-php-config=PATH
出现这个错误的时候,咱们须要按照它的提示 使用 –with-php-config=PATH从新操做
#./configure –with-php-config=/usr/local/php/bin/php-config //成功 # make && make install Installing shared extensions: /usr/local/php/lib/php/extensions/no-debug-non-zts-20121212/ //编译安装成功后的结果
最后的结果告诉咱们,phpredis已经编译成功。在/usr/local/php/lib/php/extensions/no-debug-non-zts-20121212/这个目录下已经生成了redis.so库。
而后咱们编辑php.ini配置文件,将redis.so类库加入到php.ini扩展中
extensions_dir=/usr/local/php/lib/php/extensions/no-debug-non-zts-20121212/ extension=redis.so
而后咱们重启服务,这时phpredis已经扩展成功了。咱们可使用phpinfo()函数检测当前PHP的环境信息。
发现当前php已经支持redis操做了。
其实在linux系统下面对PHP进行第三方的扩展很简单。下面咱们来看一下如何在windows下进行扩展。
在windows系统下扩展
因为工具所限,不能实际在windows系统下进行扩展。下面是翻译自https://github.com/phpredis/phpredis/issues/213#issuecomment-11361242 的方法。
1. 安装visual studio 2008
2. 下载PHP源码
3. 解压到C:\php\php5
4. 下载http://windows.php.net/downloads/php-sdk/php-sdk-binary-tools-20110915.zip 而且解压到C:\php
5. 打开 cmd 依次执行下面的命令
>cd C:\php\php-5.4.9\ext >git clone https://github.com/nicolasff/phpredis.git >cd .. >buildconf.js >"C:\Program Files\Microsoft SDKs\Windows\v7.1\Bin\SetEnv" /x86 /xp /release >path "C:\Program Files\Microsoft SDKs\Windows\v7.1\Bin";%PATH% >bin\phpsdk_setvars.bat >"C:\Program Files\Microsoft Visual Studio 9.0\VC\vcvarsall.bat" >configure.js --disable-all --enable-cli --enable-redis --enable-redis-session (if building the nts version, also add --disable-zts) >nmake php_redis.dll >fix any compilation errors
最后将生成的php_redis.dll 拷贝到 php安装目录\ext 目录下面。而后编辑php.ini,添加以下内容
extension=php_redis.dll
最后重启服务便可完成phpredis在windows下的扩展。
使用原生php封装phpredis
上面咱们介绍了使用第三方的扩展使php支持redis操做。除此以外咱们还能够本身经过redis的协议使用php来封装phpredis。
这里我先封装一个类,简单的实现get 命令。代码以下
<?php class Redis{ private $handle; private $host; private $port; private $slient_fail; private $timeout; private $connect_timeout = 3; public function __construct($host,$port,$slient_fail = false,$timeout = 60){ if($host && $port){ $this->connect($host,$port,$slient_fail,$timeout); } } private function connect($host = '127.0.0.1',$port = 6379,$slient_fail = false,$timeout = 60){ $this->host = $host; $this->port = $port; $this->slient_fail = $slient_fail; $this->timeout = $timeout; $this->handle = fsockopen($host,$port,$errno,$errstr,$this->connect_timeout); } public function get(){ $nl = "\r\n"; $cmd = '*2'.$nl.'$3'.$nl.'get'.$nl.'$5'.$nl.'mykey'.$nl; fwrite($this->handle, $cmd); $res = fgetc($this->handle); $res = trim(fgets($this->handle)); $response = fread($this->handle,$res); fgets($this->handle); echo $response; } } $obj = new Redis('192.168.144.133',6379); $obj->get();
在上面代码中,有一个须要注意的地方。就是在成员函数get()中的变量$cmd的内容须要和你们简单介绍一下。
$cmd = '*2'.$nl.'$3'.$nl.'get'.$nl.'$5'.$nl.'mykey'.$nl;
其中*后面的数字表示该命令的参数个数。由于有两个参数 get 和 mykey,因此*后面是2。$后面的数字表示的是参数的长度。get长度是3,mykey长度是5。因此前面分别是 $3和$5。
关于redis协议的详细介绍你们能够参考http://redis.io/topics/protocol。