随着redis使用越来越广泛,各种应用系统几乎都会嵌入redis。当然,PHP也不例外。在我接触到的项目中,主要是使用redis作为缓存服务器。但是对于PHP来说,它本身并不支持redis。所以说这里我们需要自己做一些事情,是PHP可以连接redis并操作它。

这里主要有两种方式:一种是通过第三方扩展,另一种是自己使用socket来封装redis。

通过第三方扩展

目前,对于php操作redis的第三方扩展有很多,我们在这就拿phpredis为例来介绍。

当然,按照常规的PHP模块来说,在安装phpredis扩展之前,如果我们像其他的模块一样来实例化redis操作对象的话,系统会报找不到redis类的错误

$obj = new redis();

var_dump($obj);

?>

错误如下

Fatal_error: class redis not found……

从上面我们也可以看出php默认是不支持redis操作的。

那么我们接下来就需要自己动手了。

在linux系统下扩展

首先我们需要下载,当然在linux上下载第三方应用还是比较容易的。phpredis的源代码托管在github上,下载地址:https://github.com/phpredis/phpredis.git

# 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系统下扩展

1. 安装visual studio 2008

2. 下载PHP源码

3. 解压到C:\php\php5

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 命令。代码如下

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。

希望本文对大家有所帮助。

php操作redis_PHP操作redis的两种方式相关推荐

  1. Python操作Neo4j图数据库的两种方式

    Python操作Neo4j图数据库的两种方式 前言 1. 用neo4j模块执行CQL ( cypher ) 语句 2. 用py2neo模块通过操作python变量,达到操作neo4j的目的 3. 用p ...

  2. java ssdb 操作link遍历map的两种方式

    方法一:不推荐使用,只会返回map中的key Link link = ssdb.link; resp = link.request("qpush", "q", ...

  3. CentOS 8安装Redis的两种方式

    国内的话建议修改yum源为阿里云,修改方法参考: CentOS 8修改yum源为国内源: 1.添加EPEL仓库 在CentOS或Red Hat系统中,需要先添加EPEL仓库 #添加EPEL仓库 sud ...

  4. Redis的两种持久化方式

    Redis的高性能是由于其将所有的数据都存储在了内存中,为了使Redis在重启之后仍然能保证数据不丢失,需要将数据存内存中同步到硬盘中,这一过程就是持久化.Redis支持两种方式的持久化,一种是RDB ...

  5. shell 不等于_关于shell编程中的整数值比较的两种方式的简单操作实例

    谈一谈关于shell编程中的整数值比较的两种方式 Shell编程有时处理一个对象时,需要我们对对象进行测试. 只有符合要求的才采取下一步操作,这样做的好处可以避免程序出错. 这个测试的对象可以是文件. ...

  6. flask 操作mysql的两种方式-sqlalchemy操作

    flask 操作mysql的两种方式-sqlalchemy操作二.ORM sqlalchemy操作#coding=utf-8 # model.pyfrom app import dbclass Use ...

  7. centos6配置日志外发_CentOS6下记录后台操作日志的两种方式

    CentOS6下记录后台操作日志的两种方式 平时为了记录登录CentOS Linux系统的操作命令,需要将操作日志记录下来,下面介绍两种方式 1.利用script以及scriptreplay工具 sc ...

  8. Android中实现SQLite数据库CRUD操作的两种方式

    Android中实现SQLite数据库CRUD操作的两种方式 SQLite是一款轻量级的关系型数据库,具有运行速度.占用资源少的特点.通常只需要几百KB的内存就够了,因此特别适合在移动设备上使用.SQ ...

  9. Java Spark之创建RDD的两种方式和操作RDD

    首先看看思维导图,我的spark是1.6.1版本,jdk是1.7版本 spark是什么?  Spark是基于内存计算的大数据并行计算框架.Spark基于内存计算,提高了在大数据环境下数据处理的实时性, ...

最新文章

  1. 《互联网项目运营分析》第四章 :互联网项目的技术选择与应用
  2. Linux档案属性与目录配置
  3. java 打开gc日志_在运行时打开GC日志记录
  4. 团队阅读之——Google’s Hybrid Approach to Research
  5. android 讲程序设为默认主屏幕_轻松搞定 PC 副屏,双屏幕更方便!
  6. Caffe学习-手写数字识别
  7. Android 在 Fragment 中使用 getActivity() NullPointException 的思考和解决办法
  8. 机械设计基础课程设计【2】
  9. 3:AngularJS:模糊查询过滤内容,下拉菜单排序,过滤敏感字符,验证判断后添加表格信息
  10. 关于boost和loki的智能指针
  11. NAT环境下,内网用户使用公网地址访问内网服务器
  12. 《 Matlab_Simulink动力学系统建模仿真》及 ‘///’动力学 达朗贝尔原理、虚位移原理、朗格朗日方程...
  13. 【机器学习笔记】【决策树】【泰坦尼克号幸存者的预测】
  14. JS_Gallary
  15. 【医学成像】超声成像中的分辨率
  16. 织梦dedecms 幻灯片 自定义设置
  17. PAT甲级1100 Mars Numbers (20 分)题解
  18. WSL下的NeoVim安装与配置
  19. c语言编写闹钟主程序流程图,课程设计基于单片机的定时闹钟.docx
  20. 软考网络管理员-华为设备命令学习笔记

热门文章

  1. Android BOOTCLASSPATH详解
  2. 电量检测芯片BQ27510使用心得
  3. Android开发概要记录
  4. MTK Android 编译命令
  5. WINCE6.0+S3C6410下的DM9000A驱动
  6. docker中操作系统与应用
  7. wxWidgets第九课 wx绘图工具
  8. struct 类型指针技巧
  9. HTTPS 证书配置
  10. 第二课unit11 系统恢复技术