寫在前面:
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並無太大差別,唯一的區別在於實例化連接類的過程中。
--------------------------- 我是可愛的分割線 ----------------------------
最后博主借地宣傳一下,漳州編程小組招新了,這是一個面向漳州青少年信息學/軟件設計的學習小組,有意向的同學點擊鏈接,聯系我吧。