Laravel 使用 Redis

閱讀時間約 6 分鐘
續上篇,安裝完redis後,緊接著就是如何在laravel中使用redis,在laravel中有phpredis與predis兩種可以選擇,phpredis是用C寫的PHP擴充套件,predis是用PHP寫的,以效能來說當然是phpredis比較好,不過其實兩者速度上沒有差很多,還是要依專案需求來選擇。
對於使用Laravel來講,可以直接用composer來安裝predis,可以說是相當方便:
$ composer require predis/predis

config/database.php:
redis預設有16個資料庫,這邊是各個資料庫的連接設定。
  • 要使用predis,要記得把env file中的REDIS_CLIENT改成predis。
  • default/cache中的url都註解掉,這是用一行url的方式設定才需要。
  • 在程式中use Illuminate\Support\Facades\Redis;,會使用預設(default)的資料庫0。

config/cache.php:
  • Laravel預設使用檔案(file)儲存快取(cache),若要改用redis,記得把env file中的CACHE_DRIVER從原本的file改為redis,session也是同理(SESSION_DRIVER=file)。
  • 可以看到redis connection 是設定 cache,也就是使用 config/database.php 中 redis 的cache設定,database 1,也就是說Cache::get('xxx'),其實是從redis db 1拿資料。

.env:

使用方法:
use Illuminate\Support\Facades\Redis;
Redis::set('name', 'Vic');
Redis::get('name');
假設程式中已經有先Redis::set('name', 'Vic');
為了debug想從redis-cli取出name的value:
$ redis-cli
$ select 0   //選擇資料庫0
$ keys *     //列出所有keys
$ get laravel_database_name  //取得key value
這邊要注意的是,laravel_database_後面的string才是在laravel中set的key name,也就是說透過redis-cli要取得key的值,要使用這個格式:
$ get laravel_database_${your_key}。
laravel_database_這個prefix其實是設定在上述的config/database.php中的REDIS_PREFIX,可以自行在.env中設定想要的redis prefix。
若是從laravel程式中要取出value直接這樣寫就可以了: Redis::get('name');

Note:
將現在選擇的資料庫中的keys都刪除:
$ redis-cli FLUSHDB

Redis是一種in memory的key-value資料庫,因為資料存在memory中,所以效能很高,適合用來需要快速查詢的場合,比如高即時性的系統、短網址系統等等。
1. 短網址系統
以短網址系統來說,一個短網址就是對應到一個真實網址,是單純的一對一關係,就非常適合用redis來加速,如果每次查詢都要從DB撈,假設網址很多,可能就要抓很久,如果從redis撈,速度就會快很多,也能避免DB被打掛。
大致上系統邏輯會是這樣:
使用者新增短網址後,將短網址與真實網址存到資料庫,也存一份到redis,當有使用者查詢這個短網址後,直接從redis by key拿real url value,如果redis中沒有這個key,就直接從DB撈,然後再把這個資料寫入Redis,下次有使用者查詢就直接從Redis拿就可以了。
2. 高即時性系統
如果是網站某段時間舉辦活動,活動期間可能會突然有大量的流量進來,如果每個request都要去query DB,很有可能DB會掛掉,因此在DB之前加入Redis來當緩衝,也是很適合使用的場合。
3. 資料統計分析
以最簡單的訪客瀏覽次數統計來說,每次的request可能會把client agent, IP, 時間等等資料記錄起來存到DB,當系統需要query總瀏覽次數的時候,每次查詢都是對DB下count(*),有可能會有效能上的問題,如果是從redis直接撈總瀏覽次數,速度會快很多,也就是每次有request進來的時候,除了將資料存進DB以外,也把總瀏覽數+1存到redis(這時候就很適合使用redis的INCR),query的時候只需要從redis拿即可。

結論:
無論如何,適時的根據需求情況運用Redis,不僅能減輕DB的負擔,也能大幅提升系統的速度,但Redis最終還是要在linux環境上能夠運作,之後有機會再來分享如何在linux環境中安裝redis吧!
為什麼會看到廣告
21會員
161內容數
留言0
查看全部
發表第一個留言支持創作者!
Vic Lin的沙龍 的其他內容
Redis主要是運行在Linux系統環境中的,官方下載區找不到windows安裝程式,不過微軟有維護windows版本的,可以到github release page下載安裝。 直接下載msi來安裝: 測試是否安裝成功: 回傳PONG表示服務正常。 查看版本資訊: 列出所有key:
如上圖資料,想要group by g_id找到最大update_datetime的row:
MySQL中欄位數字相加可以很容易達成: 但假如其中一個欄位是null,最終的total也會是null,可能不符合預期需求。 解決方法,使用COALESCE將null轉為0:
若是用第一種callback方法,response json要包含連結跟unique code,這個連結是要給user查詢刪除狀態用的,從官方提供的範例PHP程式碼可得知。 Note: 別忘了圖1的「資料刪除回呼網址」記得填你的callback url。
最近發現在laravel中$query->count()回傳的數量居然是錯的,原來是因為如果有下groupBy之後再去count就會得到錯的值,可以發現明顯與count($query->get()) return的數字不一致 (明明總共有100筆,卻回傳只有2筆)。 解決方法如下:
本筆記參考: 1. https://www.w3schools.com/sql/func_mysql_date_format.asp
Redis主要是運行在Linux系統環境中的,官方下載區找不到windows安裝程式,不過微軟有維護windows版本的,可以到github release page下載安裝。 直接下載msi來安裝: 測試是否安裝成功: 回傳PONG表示服務正常。 查看版本資訊: 列出所有key:
如上圖資料,想要group by g_id找到最大update_datetime的row:
MySQL中欄位數字相加可以很容易達成: 但假如其中一個欄位是null,最終的total也會是null,可能不符合預期需求。 解決方法,使用COALESCE將null轉為0:
若是用第一種callback方法,response json要包含連結跟unique code,這個連結是要給user查詢刪除狀態用的,從官方提供的範例PHP程式碼可得知。 Note: 別忘了圖1的「資料刪除回呼網址」記得填你的callback url。
最近發現在laravel中$query->count()回傳的數量居然是錯的,原來是因為如果有下groupBy之後再去count就會得到錯的值,可以發現明顯與count($query->get()) return的數字不一致 (明明總共有100筆,卻回傳只有2筆)。 解決方法如下:
本筆記參考: 1. https://www.w3schools.com/sql/func_mysql_date_format.asp
你可能也想看
Google News 追蹤
Thumbnail
這個秋,Chill 嗨嗨!穿搭美美去賞楓,裝備款款去露營⋯⋯你的秋天怎麼過?秋日 To Do List 等你分享! 秋季全站徵文,我們準備了五個創作主題,參賽還有機會獲得「火烤兩用鍋」,一起來看看如何參加吧~
Thumbnail
美國總統大選只剩下三天, 我們觀察一整週民調與金融市場的變化(包含賭局), 到本週五下午3:00前為止, 誰是美國總統幾乎大概可以猜到60-70%的機率, 本篇文章就是以大選結局為主軸來討論近期甚至到未來四年美股可能的改變
Thumbnail
Faker昨天真的太扯了,中國主播王多多點評的話更是精妙,分享給各位 王多多的點評 「Faker是我們的處境,他是LPL永遠繞不開的一個人和話題,所以我們特別渴望在決賽跟他相遇,去直面我們的處境。 我們曾經稱他為最高的山,最長的河,以為山海就是盡頭,可是Faker用他28歲的年齡...
Thumbnail
在使用laravel中的Queue job的時候 如果希望job中斷還可以重新啟動這個時候就會需要用到Supervisor了 本篇文章為您帶來如何使用Supervisor執行Laravel的queue:work的教學
Thumbnail
為了做登入log紀錄,練習mongoDB來存放log資料,這邊就來紀錄 Laravel 配置mongoDB的實作,而原本我的side project是練習搭建docker開發環境,故這邊會以dockerfile來設定跟紀錄踩坑問題。
Thumbnail
本篇文章為Laravel初學者提供了一個指南,深入探討了Laravel的routes目錄下的功能。文章詳細描述了web.php和api.php的差異和使用情境,並簡要介紹了console.php和channels.php的功能。透過這篇文章,讀者可以更好地理解和利用Laravel的路由功能。
Thumbnail
本篇深入探討了Model的基本定義、其Controller的關係,以及如何在Controller中使用Model進行CRUD操作。強調了Model的關聯方法,如hasMany,並透過範例程式碼展示了其實際應用。為初學者提供了一個清晰的Laravel入門路徑,同時也為有經驗的開發者提供了實用的參考。
Thumbnail
Laravel的Model是資料和邏輯的核心連接,簡化資料庫操作。本指南著重於Model的基本屬性、方法和Eloquent ORM的使用。我們詳細探討了hasMany、hasOne和belongsTo這些關聯,它們基於外鍵確定資料間的關係。透過本文,您將深入了解如何有效地在Laravel中使用Mod
Thumbnail
這個秋,Chill 嗨嗨!穿搭美美去賞楓,裝備款款去露營⋯⋯你的秋天怎麼過?秋日 To Do List 等你分享! 秋季全站徵文,我們準備了五個創作主題,參賽還有機會獲得「火烤兩用鍋」,一起來看看如何參加吧~
Thumbnail
美國總統大選只剩下三天, 我們觀察一整週民調與金融市場的變化(包含賭局), 到本週五下午3:00前為止, 誰是美國總統幾乎大概可以猜到60-70%的機率, 本篇文章就是以大選結局為主軸來討論近期甚至到未來四年美股可能的改變
Thumbnail
Faker昨天真的太扯了,中國主播王多多點評的話更是精妙,分享給各位 王多多的點評 「Faker是我們的處境,他是LPL永遠繞不開的一個人和話題,所以我們特別渴望在決賽跟他相遇,去直面我們的處境。 我們曾經稱他為最高的山,最長的河,以為山海就是盡頭,可是Faker用他28歲的年齡...
Thumbnail
在使用laravel中的Queue job的時候 如果希望job中斷還可以重新啟動這個時候就會需要用到Supervisor了 本篇文章為您帶來如何使用Supervisor執行Laravel的queue:work的教學
Thumbnail
為了做登入log紀錄,練習mongoDB來存放log資料,這邊就來紀錄 Laravel 配置mongoDB的實作,而原本我的side project是練習搭建docker開發環境,故這邊會以dockerfile來設定跟紀錄踩坑問題。
Thumbnail
本篇文章為Laravel初學者提供了一個指南,深入探討了Laravel的routes目錄下的功能。文章詳細描述了web.php和api.php的差異和使用情境,並簡要介紹了console.php和channels.php的功能。透過這篇文章,讀者可以更好地理解和利用Laravel的路由功能。
Thumbnail
本篇深入探討了Model的基本定義、其Controller的關係,以及如何在Controller中使用Model進行CRUD操作。強調了Model的關聯方法,如hasMany,並透過範例程式碼展示了其實際應用。為初學者提供了一個清晰的Laravel入門路徑,同時也為有經驗的開發者提供了實用的參考。
Thumbnail
Laravel的Model是資料和邏輯的核心連接,簡化資料庫操作。本指南著重於Model的基本屬性、方法和Eloquent ORM的使用。我們詳細探討了hasMany、hasOne和belongsTo這些關聯,它們基於外鍵確定資料間的關係。透過本文,您將深入了解如何有效地在Laravel中使用Mod