php操作redis的两种方式-ag捕鱼王app官网

当前位置:ag捕鱼王app官网 > > 编程语言 > php >

php操作redis的两种方式

作者:迹忆 最近更新:2022/11/19 浏览次数:

随着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上,下载地址:

# 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系统下进行扩展。下面是翻译自 的方法。

1. 安装visual studio 2008

2. 下载php源码

3. 解压到c:\php\php5

4. 下载 并且解压到c:\php

5. 打开 cmd 依次执行下面的命令

>cd c:\php\php-5.4.9\ext
>git clone
>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。

关于redis协议的详细介绍大家可以参考。

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

转载请发邮件至 1244347461@qq.com 进行申请,经作者同意之后,转载请以链接形式注明出处

本文地址:

相关文章

发布时间:2024/03/25 浏览次数:70 分类:mysql

在本指南中,我们将了解使用 phpmyadmin 从 mysql 数据库中删除所有行的最佳方法。

java 中的 websocket 客户端

发布时间:2023/08/09 浏览次数:789 分类:java

本文介绍如何使用 java 创建 websocket 客户端。java 中的 websocket 客户端 websocket 可用于在客户端和服务器之间创建通信通道。 websocket 协议与用于 web 通信的 http 兼容。

java 错误 java.net.socketexception: network is unreachable

发布时间:2023/07/16 浏览次数:963 分类:java

今天我们就来讨论一下java编程时出现java.net.socketexception: network is unreachable异常的可能原因及解决方法。java中出现java.net.socketexception: network is unreachable的可能原因及ag捕鱼王app官网的解决方案

修复 java 中 java.net.socketexception: broken pipe 错误

发布时间:2023/07/15 浏览次数:530 分类:java

本篇文章介绍了使用 java 编程的 java.net.socketexception: broken pipeline 错误,并重点介绍了其可能的原因和ag捕鱼王app官网的解决方案。错误描述、原因及解决方法

发布时间:2023/07/13 浏览次数:331 分类:java

在本篇文章中,我们将讨论 java.net.sockettimeoutexception: connection timed out。 但首先,让我们仔细看看套接字和超时的概念。java 中的套接字 两个计算机应用程序之间的逻辑链接可能有多个端点,其

修复 java.net.socketexception: connection reset 错误

发布时间:2023/07/13 浏览次数:2148 分类:java

今天的文章将讨论java中可能出现的 java.net.socketexception: connection reset 错误的原因和ag捕鱼王app官网的解决方案。 最后,我们将看到如何消除 java 的 java.net.socketexception:connection reset错误。

扫一扫阅读全部技术教程

社交账号
  • https://www.github.com/onmpw
  • qq:1244347461

最新推荐

教程更新

热门标签

扫码一下
查看教程更方便
网站地图