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吧!
即將進入廣告,捲動後可繼續閱讀
為什麼會看到廣告
avatar-img
21會員
161內容數
留言0
查看全部
avatar-img
發表第一個留言支持創作者!
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
11/20日NVDA即將公布最新一期的財報, 今天Sell Side的分析師, 開始調高目標價, 市場的股價也開始反應, 未來一週NVDA將重新回到美股市場的焦點, 今天我們要分析NVDA Sell Side怎麼看待這次NVDA的財報預測, 以及實際上Buy Side的倉位及操作, 從
Thumbnail
Hi 大家好,我是Ethan😊 相近大家都知道保濕是皮膚保養中最基本,也是最重要的一步。無論是在畫室裡長時間對著畫布,還是在旅途中面對各種氣候變化,保持皮膚的水分平衡對我來說至關重要。保濕化妝水不僅能迅速為皮膚補水,還能提升後續保養品的吸收效率。 曾經,我的保養程序簡單到只包括清潔和隨意上乳液
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
11/20日NVDA即將公布最新一期的財報, 今天Sell Side的分析師, 開始調高目標價, 市場的股價也開始反應, 未來一週NVDA將重新回到美股市場的焦點, 今天我們要分析NVDA Sell Side怎麼看待這次NVDA的財報預測, 以及實際上Buy Side的倉位及操作, 從
Thumbnail
Hi 大家好,我是Ethan😊 相近大家都知道保濕是皮膚保養中最基本,也是最重要的一步。無論是在畫室裡長時間對著畫布,還是在旅途中面對各種氣候變化,保持皮膚的水分平衡對我來說至關重要。保濕化妝水不僅能迅速為皮膚補水,還能提升後續保養品的吸收效率。 曾經,我的保養程序簡單到只包括清潔和隨意上乳液
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