1. 程式人生 > 實用技巧 >Laravel入坑指南(6)——Redis快取

Laravel入坑指南(6)——Redis快取

寫在前面:

Redis是常用nosql服務之一,在Redis官網上最新的穩定版本是6.0.6。這裡不討論Redis服務如何編譯,如何使用。在Redis官網有很健全的文件。

這裡要討論的是無論在centos6還是在centos7下,編譯Redis 6+版本都會看到一堆很魔性的報錯redisServer has no member ****。原以為是redis的原始碼有問題,後來發現是預設的gcc版本不夠支援這麼高的版本。所以我們要先把預設的gcc版本升上去:

#安裝開發套件
yum install cpp
yum install binutils
yum install glibc
yum install
glibc-kernheaders yum install glibc-common yum install glibc-devel yum install gcc yum install make #或者直接用 yum groupinstall Development tools #升級gcc版本 yum -y install centos-release-scl yum -y install devtoolset-9-gcc devtoolset-9-gcc-c++ devtoolset-9-binutils scl enable devtoolset-9 bash

到這裡,gcc的版本被我們升到了9.3.1。這時,gcc版本已經接近顛峰,可以浪起來了。

寫在前面2:

PHP連線redis有兩種方式,一種是採用pecl提供的redis擴充套件,我們稱為phpredis(傳送門);另一種,則是以純的php實現redis協議的包predis(傳送門)。這兩種連線方式,各有優缺點:

phpredis:優點:速度飛快,穩定性極強;劣勢:安裝麻煩一點點。(對於筆者來說,這個劣勢根本稱不上劣勢,玩個吃雞都要安裝,這麼牛B的擴充套件反而想偷懶怎麼可能?)

predis:優點:安裝極其方便,一名composer require predis/predis就搞定了;劣勢:因為是純php實現的,執行效率上自上敵不過phpredis。

對於Laravel來說,兩者都支援,只要正確安裝即可。筆者本來想介紹predis,但是在composer安裝過程中遇到報錯,需要依賴fileinfo擴充套件。筆者尋思著既然都要安裝擴充套件,為什麼我不直接用pecl的redis擴充套件?

所以以下篇幅,包括配置都是有phpredis為例子進行討論。

1、配置

PHP連線redis與之前討論過的連線mysql很類似,需要知道host(地址)、password(密碼)和port(埠,預設為6379)。redis的連線配置在專案根目錄下/config/database.php中的redis配置節,如下圖

這個配置節中,所有的value都用env()函式讀出來的(這個函式幹啥用?回去看看第4節),所以我們在/.env配置檔案中又有如下配置項:

到了這一步配置就完成了。注意REDIS_CLIENT現在用的是phpredis,並非predis,所以大家要確保pecl redis擴充套件安裝成功,劃重點敲黑板。不會安裝擴充套件的同學,點選文章最下方的連結,連繫筆者。

2、使用

use Illuminate\Support\Facades\Redis;

Redis::set("key",["arr_key"=>"arr_value"]);

上面這是一個簡單的例子。例子中redis的key對應了一個php的陣列。

但是我們進入redis客戶端一看,這時寫入的是Array這個字串。因為我沒寫入時沒有對這個陣列進行序列化,我們需要在之前呼叫setOption設定序列化方式。

那問題來了,我們怎麼呼叫setOption,關於redis這一節官網介紹的資料非常少,除了get和set函式幾乎沒太多內容。所以這時筆者去翻閱了原始碼,發現RedisManager原始碼中有這幾行程式碼:

瞬間恍然,phpredis的所有成員函式,我們都可以通過\Illuminate\Support\Facades\Redis進行呼叫(劃重點)

use Illuminate\Support\Facades\Redis;

Redis::setOption(\Redis::OPT_SERIALIZER, \Redis::SERIALIZER_PHP);
Redis::setex("hello",20,["ok"=>"answer"]);

上面這個示例中,通過\Redis呼叫了phpredis的兩個常量;setex也是phpredis提供的函式。

如果想問phpredis有多少成員函式可供使用,請進入:傳送門

到這裡,我們在Laravel下如何使用redis已經一切瞭然。這一節就要結束了,討論的話題已經過半。這個系列的文章計劃有12篇,每篇的閱讀和練習假設需要2小時,我們目的就是讓大家24小時入坑Laravel。

大家下期再見:)

寫在最後:關於Redis叢集

redis叢集在程式碼連線與使用上與單機redis並無太大差別,唯一的區別在於例項化連線類的過程中。

phpredis連線叢集,請看這裡:傳送門 需要密碼連線

predis連線叢集,請看這裡:傳送門 需要密碼連線

--------------------------- 我是可愛的分割線 ----------------------------

最後博主借地宣傳一下,漳州程式設計小組招新了,這是一個面向漳州青少年資訊學/軟體設計的學習小組,有意向的同學點選連結,聯絡我吧。