zoukankan      html  css  js  c++  java
  • CentOS+Apache+php无法访问redis的解决方法

    PHP 使用 Redis

    安装

    开始在 PHP 中使用 Redis 前, 我们需要确保已经安装了 redis 服务及 PHP redis 驱动,且你的机器上能正常使用 PHP。 接下来让我们安装 PHP redis 驱动:下载地址为:https://github.com/phpredis/phpredis/releases

    PHP安装redis扩展

    以下操作需要在下载的 phpredis 目录中完成:

    $ wget https://github.com/phpredis/phpredis/archive/2.2.4.tar.gz
    $ cd phpredis-2.2.7                      # 进入 phpredis 目录
    $ /usr/local/php/bin/phpize              # php安装后的路径
    $ ./configure --with-php-config=/usr/local/php/bin/php-config
    $ make && make install

    如果你是 PHP7 版本,则需要下载指定分支:

    git clone -b php7 https://github.com/phpredis/phpredis.git

    修改php.ini文件

    vi /usr/local/php/lib/php.ini

    增加如下内容:

    extension_dir = "/usr/local/php/lib/php/extensions/no-debug-zts-20090626"
    
    extension=redis.so

    安装完成后重启php-fpm 或 apache。查看phpinfo信息,就能看到redis扩展。

    PHP 使用 Redis


    连接到 redis 服务

    <?php
        //连接本地的 Redis 服务
       $redis = new Redis();
       $redis->connect('127.0.0.1', 6379);
       echo "Connection to server sucessfully";
             //查看服务是否运行
       echo "Server is running: " . $redis->ping();
    ?>

    执行脚本,输出结果为:

    Connection to server sucessfully
    Server is running: PONG

    Redis PHP String(字符串) 实例

    <?php
       //连接本地的 Redis 服务
       $redis = new Redis();
       $redis->connect('127.0.0.1', 6379);
       echo "Connection to server sucessfully";
       //设置 redis 字符串数据
       $redis->set("tutorial-name", "Redis tutorial");
       // 获取存储的数据并输出
       echo "Stored string in redis:: " . $redis->get("tutorial-name");
    ?>

    执行脚本,输出结果为:

    Connection to server sucessfully
    Stored string in redis:: Redis tutorial

    Redis PHP List(列表) 实例

    <?php
       //连接本地的 Redis 服务
       $redis = new Redis();
       $redis->connect('127.0.0.1', 6379);
       echo "Connection to server sucessfully";
       //存储数据到列表中
       $redis->lpush("tutorial-list", "Redis");
       $redis->lpush("tutorial-list", "Mongodb");
       $redis->lpush("tutorial-list", "Mysql");
       // 获取存储的数据并输出
       $arList = $redis->lrange("tutorial-list", 0 ,5);
       echo "Stored string in redis";
       print_r($arList);
    ?>

    执行脚本,输出结果为:

    Connection to server sucessfully
    Stored string in redis
    Redis
    Mongodb
    Mysql

    Redis PHP Keys 实例

    <?php
       //连接本地的 Redis 服务
       $redis = new Redis();
       $redis->connect('127.0.0.1', 6379);
       echo "Connection to server sucessfully";
       // 获取数据并输出
       $arList = $redis->keys("*");
       echo "Stored keys in redis:: ";
       print_r($arList);
    ?>

    执行脚本,输出结果为:

    Connection to server sucessfully
    Stored string in redis::
    tutorial-name
    tutorial-list

    问题处理:

    在CentOS下配置Apache+php+redis+phpredis环境。
    编辑访问redis缓存的php程序test.php,以应用程序方式在后台运行,可成功访问Redis,而在Apache下以网页形式访问时则出错,在 访问Redis以及之后的代码均不再执行。查看Apache的日志:/var/log/httpd/error_log,发现代码运行时出现异常:
    PHP Fatal error: Uncaught exception ‘RedisException’ with message ‘Redis server went away’ in /var/www/html/test.php

    在网上查该异常时均认为是php的Sokcet超时时间设置的过短,应该在代码前加上:ini_set(‘default_socket_timeout’, -1);
    经测试仍无法解决该问题,因在代码后台运行正常,因此判断并非代码本身问题,而是Apache不允许访问网络资源,尝试如下解决方法:
    打开/etc/selinux/config,找到其中的:
    SELINUX=enforcing
    改为:SELINUX=disabled

    问题解决!

    如果仍不能解决问题,可执行如下指令:
    /usr/sbin/setsebool httpd_can_network_connect=1

  • 相关阅读:
    开启防火墙如何部署k8s
    docker及k8s安装consul
    docker安装rocketmq
    docker安装gitlab
    k8s认证与授权
    部署dashboard
    k8sStatefulSet控制器
    k8sSecret资源
    k8sConfigMap资源
    使用nfs制作动态分配存储卷
  • 原文地址:https://www.cnblogs.com/mracale/p/5801667.html
Copyright © 2011-2022 走看看