最近有個案子會需要頻繁讀取mysql資料庫,為了降低資料庫的負載所以考慮使用memcached或redis來做緩存。最終決定使用redis !

但沒想到在php7上安裝redis竟然如此讓人折騰,於是決定將操作步驟紀錄下來,以免以後忘記....

環境說明

作業系統 : centos 7

PHP版本 : 7.0

伺服器位置: Linode 

如果尚未安裝LAMP 可以參考此篇文章: 在CentOS7下安裝LAMP(Apache+PHP7+MariaDB ) 

任務目標

(一) 安裝redis server

(二) 安裝php redis擴展

(三) 設定 redis 密碼

(四) 測試php使用redis

安裝redis server

要使用redis之前要先安裝redis服務器(廢話),由於yum裡面就有提供,所以這邊就不再自行編譯安裝。

安裝redis

yum install redis

它會自行去找redis然後問你是否要安裝,點[Y]進行安裝,等一段時間(很快)就安裝完畢了。

開機時自動啟動

systemctl enable redis

啟動redis server

systemctl start redis

到此階段我們就已經成功地安裝redis,但要注意防火牆有可能阻擋redis的port [ redis預設port=>6379 ]

開放 redis port 

預設是6379若有更改過port,請將它改成對應port

firewall-cmd --permanent --zone=public --add-port=6379/tcp 

重新啟動防火牆

firewall-cmd --reload

安裝php redis 擴展

接下來這階段才是重頭戲,在這個地方卡了好幾個鐘頭才搞定!

下載 phpredis

我們需要安裝它才有辦法讓php與redis溝通,有點像mysql需要安裝pdo或mysqi之類的...(大概)

phpredis 來源 : https://github.com/phpredis/phpredis

如果尚未安裝git

 yum install git

透過git去下載phpredis

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

下載完畢後,進入phpredis目錄

cd phpredis

接著,我們要進行編譯模組

/usr/bin/phpize

但在這邊有可能會出現錯誤,無法執行phpize (我就在這邊卡了好久)

如果出現 can`t find PHP headers in .... 之類的表示沒安裝 php-devel 擴展包

你可以使用yum install php-devel 安裝擴展,但有很高的機率還是會出現錯誤,原因在於它裝的版本與我們的有衝突

因為我們的php版本為7,所以要改使用下面指令,才不會出現錯誤

yum install php70w-devel 

接著,重回剛剛那個步驟再次編譯模組,有四個操作 依照順序輸入讓系統自動跑

直到可輸入指令後再換下一個

#1

/usr/bin/phpize

#2

./configure

#3

make

#4

make install

最後出現類似這樣的訊息 Installing shared extensions: /usr/lib64/php/modules/ 

其中 /usr/lib64/php/modules/ 表示擴展安裝的位置(每個人不太一樣)

補充:

    如果出現:configure: error: Cannot find OpenSSL's <evp.h>

 yum install openssl-devel

    如果出現:configure: error: no acceptable C compiler found in $PATH

yum install gcc

添加擴展

恭喜 ~ 在上面的階段,我們已經成功編譯 php redis 擴展了,剩下只需到 php.ini 添加擴展

就能在php中使用 redis。

如果使用yum安裝php通常php.ini都放在 /etc/php.ini

打開 php.ini 將 extension=redis.so 添加到文件裡面 (記得要保存)

重新啟動 apache

systemctl restart httpd

重新啟動後,我們可以透過 phpinfo() 來看是否載入redis

php-redis.png

設定 redis 密碼

一般情況下,資料庫都是預設無密碼的,redis也不例外。但這個時代,資料還挺有價值的,所以還是設個密碼吧!

(一) 找到 redis.conf

假如redis是使用yum安裝的,通常可在 /etc/redis.conf 找到它

(二)在redis.conf 找到 # requirepass foobared

打開 redis.conf 搜尋 # requirepass foobared 並將 # 拿掉,以及將 foobared 改成你想要的密碼,設置完畢後保存

redis_pass.png

紅色的部分就是密碼,請改成自己的...

(三)重新啟動redis

systemctl restart redis

據說,redis速度快,可被快速嘗試,所以密碼要盡量設難一點,以免被破解。

測試php使用redis

<?php 
 $redis = new Redis();
 $redis->connect('127.0.0.1', 6379); //連線
 $redis->auth('aidectw#jieog93@#$jeoic546!jiowcnurg034nf#blogaidectw'); //改成自己的密碼
 $redis->set('site_url', 'https://blog.aidec.tw'); //設定 
 echo $redis->get('site_url'); //讀取
?>

輸出結果

redis_output.png

執行時間約為 0.0004 秒



文章轉載或引用,請保留原文出處!!3Q