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


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM