寫在前面:php
Redis是經常使用nosql服務之一,在Redis官網上最新的穩定版本是6.0.6。這裏不討論Redis服務如何編譯,如何使用。在Redis官網有很健全的文檔。html
這裏要討論的是不管在centos6仍是在centos7下,編譯Redis 6+版本都會看到一堆很魔性的報錯redisServer has no member ****。原覺得是redis的源碼有問題,後來發現是默認的gcc版本不夠支持這麼高的版本。因此咱們要先把默認的gcc版本升上去:mysql
#安裝開發套件 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版本已經接近顛峯,能夠浪起來了。c++
寫在前面2:git
PHP鏈接redis有兩種方式,一種是採用pecl提供的redis擴展,咱們稱爲phpredis(傳送門);另外一種,則是以純的php實現redis協議的包predis(傳送門)。這兩種鏈接方式,各有優缺點:github
phpredis:優勢:速度飛快,穩定性極強;劣勢:安裝麻煩一點點。(對於筆者來講,這個劣勢根本稱不上劣勢,玩個吃雞都要安裝,這麼牛B的擴展反而想偷懶怎麼可能?)redis
predis:優勢:安裝極其方便,一名composer require predis/predis就搞定了;劣勢:由於是純php實現的,運行效率上自上敵不過phpredis。sql
對於Laravel來講,二者都支持,只要正確安裝便可。筆者原本想介紹predis,可是在composer安裝過程當中遇到報錯,須要依賴fileinfo擴展。筆者尋思着既然都要安裝擴展,爲何我不直接用pecl的redis擴展?編程
因此如下篇幅,包括配置都是有phpredis爲例子進行討論。centos
一、配置
PHP鏈接redis與以前討論過的鏈接mysql很相似,須要知道host(地址)、password(密碼)和port(端口,默認爲6379)。redis的鏈接配置在項目根目錄下/config/database.php中的redis配置節,以下圖
這個配置節中,全部的value都用env()函數讀出來的(這個函數幹啥用?回去看看第4節),因此咱們在/.env配置文件中又有以下配置項:
到了這一步配置就完成了。注意REDIS_CLIENT如今用的是phpredis,並不是predis,因此你們要確保pecl redis擴展安裝成功,劃重點敲黑板。不會安裝擴展的同窗,點擊文章最下方的連接,連繫筆者。
二、使用
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並沒有太大差異,惟一的區別在於實例化鏈接類的過程當中。
--------------------------- 我是可愛的分割線 ----------------------------
最後博主借地宣傳一下,漳州編程小組招新了,這是一個面向漳州青少年信息學/軟件設計的學習小組,有意向的同窗點擊連接,聯繫我吧。