Laravel 使用 Redis

更新於 發佈於 閱讀時間約 7 分鐘

續上篇,安裝完redis後,緊接著就是如何在laravel中使用redis,在laravel中有phpredis與predis兩種可以選擇,phpredis是用C寫的PHP擴充套件,predis是用PHP寫的,以效能來說當然是phpredis比較好,不過其實兩者速度上沒有差很多,還是要依專案需求來選擇。

對於使用Laravel來講,可以直接用composer來安裝predis,可以說是相當方便:

$ composer require predis/predis

config/database.php:

raw-image

redis預設有16個資料庫,這邊是各個資料庫的連接設定。

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

config/cache.php:

raw-image
raw-image





  • 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:

raw-image








使用方法:

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
raw-image





這邊要注意的是,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吧!



本筆記參考:
1. https://www.kancloud.cn/qq2337027980/qq2337027980/1551012
2. https://iter01.com/607046.html
3. https://laravelacademy.org/post/22016
4. https://codertw.com/%E8%B3%87%E6%96%99%E5%BA%AB/17295/
5. https://blog.csdn.net/zhezhebie/article/details/117924530
6. https://stackoverflow.com/questions/6851909/how-do-i-delete-everything-in-redis
7. https://segmentfault.com/a/1190000018811316
8. https://www.shellhacks.com/redis-delete-all-keys-redis-cli/
9. https://blog.techbridge.cc/2016/06/18/redis-introduction/


留言
avatar-img
留言分享你的想法!
avatar-img
Vic Lin的沙龍
20會員
161內容數
Vic Lin的沙龍的其他內容
2023/08/13
父元件 傳遞方法使用@ <template>    ...    <Login @modalClose="modalClose"/> ... </template> <script setup>     const _modal = ref();     function m
2023/08/13
父元件 傳遞方法使用@ <template>    ...    <Login @modalClose="modalClose"/> ... </template> <script setup>     const _modal = ref();     function m
2023/03/25
前情提要 由於我的筆電已經用了10年,無法再戰下去了,且有預算考量,加上使用電腦幾乎都是定點,只有偶爾回家的時候會需要攜帶,因此最終選擇了迷你電腦,體積小不占空間,又方便攜帶,剛好符合我的需求。 菜單 由於這台無法裝獨顯,所以CPU的部分選擇 AMD R5 3400G(含Vega 11內
Thumbnail
2023/03/25
前情提要 由於我的筆電已經用了10年,無法再戰下去了,且有預算考量,加上使用電腦幾乎都是定點,只有偶爾回家的時候會需要攜帶,因此最終選擇了迷你電腦,體積小不占空間,又方便攜帶,剛好符合我的需求。 菜單 由於這台無法裝獨顯,所以CPU的部分選擇 AMD R5 3400G(含Vega 11內
Thumbnail
2023/03/10
Nuxt3中可使用useFetch來獲取數據,不須再引用axios,相當方便: 本筆記參考: https://juejin.cn/post/7104071421160063012 https://juejin.cn/post/7086472647575339045
2023/03/10
Nuxt3中可使用useFetch來獲取數據,不須再引用axios,相當方便: 本筆記參考: https://juejin.cn/post/7104071421160063012 https://juejin.cn/post/7086472647575339045
看更多
你可能也想看
Thumbnail
TOMICA第一波推出吉伊卡哇聯名小車車的時候馬上就被搶購一空,一直很扼腕當時沒有趕緊入手。前陣子閒來無事逛蝦皮,突然發現幾家商場都又開始重新上架,價格也都回到正常水準,估計是官方又再補了一批貨,想都沒想就立刻下單! 同文也跟大家分享近期蝦皮購物紀錄、好用推薦、蝦皮分潤計畫的聯盟行銷!
Thumbnail
TOMICA第一波推出吉伊卡哇聯名小車車的時候馬上就被搶購一空,一直很扼腕當時沒有趕緊入手。前陣子閒來無事逛蝦皮,突然發現幾家商場都又開始重新上架,價格也都回到正常水準,估計是官方又再補了一批貨,想都沒想就立刻下單! 同文也跟大家分享近期蝦皮購物紀錄、好用推薦、蝦皮分潤計畫的聯盟行銷!
Thumbnail
每年4月、5月都是最多稅要繳的月份,當然大部份的人都是有機會繳到「綜合所得稅」,只是相當相當多人還不知道,原來繳給政府的稅!可以透過一些有活動的銀行信用卡或電子支付來繳,從繳費中賺一點點小確幸!就是賺個1%~2%大家也是很開心的,因為你們把沒回饋變成有回饋,就是用卡的最高境界 所得稅線上申報
Thumbnail
每年4月、5月都是最多稅要繳的月份,當然大部份的人都是有機會繳到「綜合所得稅」,只是相當相當多人還不知道,原來繳給政府的稅!可以透過一些有活動的銀行信用卡或電子支付來繳,從繳費中賺一點點小確幸!就是賺個1%~2%大家也是很開心的,因為你們把沒回饋變成有回饋,就是用卡的最高境界 所得稅線上申報
Thumbnail
Redis被稱為「資料結構伺服器」,因為其中的值(Value)可以是字串(String)、雜湊(Hash)、清單(List)、集合(Set)和有序集合(Sorted Set)等類型。 安裝 下載 wget https://download.redis.io/release/redis-6.
Thumbnail
Redis被稱為「資料結構伺服器」,因為其中的值(Value)可以是字串(String)、雜湊(Hash)、清單(List)、集合(Set)和有序集合(Sorted Set)等類型。 安裝 下載 wget https://download.redis.io/release/redis-6.
Thumbnail
Laravel是一個以MVC(參考:[設計模式]MVC)為架構的PHP Web框架。Laravel支援使用者身份驗證和授權,提供模組化套件系統。Laravel使用Blade模板系統將PHP程式碼與HTML網頁分離。 安裝環境 下載安裝composer https://getcomposer.o
Thumbnail
Laravel是一個以MVC(參考:[設計模式]MVC)為架構的PHP Web框架。Laravel支援使用者身份驗證和授權,提供模組化套件系統。Laravel使用Blade模板系統將PHP程式碼與HTML網頁分離。 安裝環境 下載安裝composer https://getcomposer.o
Thumbnail
假設資料如下: local DB裡面的test Collection SELECT SELECT可以這樣寫: 由於config/database.php中設定的default DB_CONNECTION是mysql,所以這邊特別指定使用mongodb connection。 回傳結果如下: 軟刪除
Thumbnail
假設資料如下: local DB裡面的test Collection SELECT SELECT可以這樣寫: 由於config/database.php中設定的default DB_CONNECTION是mysql,所以這邊特別指定使用mongodb connection。 回傳結果如下: 軟刪除
Thumbnail
欲在Laravel中使用MongoDB,首先要確認有安裝MongoDB PHP driver,接著再安裝Laravel MongoDB套件,才能開始使用CRUD。 1. 安裝MongoDB PHP driver (1) 到這邊下載MongoDB PHP driver (3) 檢查是否正常 後記:
Thumbnail
欲在Laravel中使用MongoDB,首先要確認有安裝MongoDB PHP driver,接著再安裝Laravel MongoDB套件,才能開始使用CRUD。 1. 安裝MongoDB PHP driver (1) 到這邊下載MongoDB PHP driver (3) 檢查是否正常 後記:
Thumbnail
在Laravel中想達到websocket效果,由後端主動傳訊給前端,需使用broadcasting 將event廣播出去,由前端來接收訊息。 因此在業界常看到使用Redis + socket.io的架構,也是本篇選擇的機制。 從伺服器廣播訊息到前端接收的流程,大概會是這樣: 安裝與設定Redis
Thumbnail
在Laravel中想達到websocket效果,由後端主動傳訊給前端,需使用broadcasting 將event廣播出去,由前端來接收訊息。 因此在業界常看到使用Redis + socket.io的架構,也是本篇選擇的機制。 從伺服器廣播訊息到前端接收的流程,大概會是這樣: 安裝與設定Redis
Thumbnail
如上篇,使用Migration來做DB版本控制,但是會發現開發過程中若是要建立測試資料,要進DB一筆一筆手動新增或執行預先寫好的insert sql,其實有點麻煩,使用Laravel提供的Seeder功能,就可以解決這個問題。 指令如下,假設建立一個user table seeder:
Thumbnail
如上篇,使用Migration來做DB版本控制,但是會發現開發過程中若是要建立測試資料,要進DB一筆一筆手動新增或執行預先寫好的insert sql,其實有點麻煩,使用Laravel提供的Seeder功能,就可以解決這個問題。 指令如下,假設建立一個user table seeder:
Thumbnail
對於使用Laravel來講,可以直接用composer來安裝predis,可以說是相當方便: config/database.php: redis預設有16個資料庫,這邊是各個資料庫的連接設定。 要使用predis,要記得把env file中的REDIS_CLIENT改成predis。 .env:
Thumbnail
對於使用Laravel來講,可以直接用composer來安裝predis,可以說是相當方便: config/database.php: redis預設有16個資料庫,這邊是各個資料庫的連接設定。 要使用predis,要記得把env file中的REDIS_CLIENT改成predis。 .env:
Thumbnail
Redis主要是運行在Linux系統環境中的,官方下載區找不到windows安裝程式,不過微軟有維護windows版本的,可以到github release page下載安裝。 直接下載msi來安裝: 測試是否安裝成功: 回傳PONG表示服務正常。 查看版本資訊: 列出所有key:
Thumbnail
Redis主要是運行在Linux系統環境中的,官方下載區找不到windows安裝程式,不過微軟有維護windows版本的,可以到github release page下載安裝。 直接下載msi來安裝: 測試是否安裝成功: 回傳PONG表示服務正常。 查看版本資訊: 列出所有key:
Thumbnail
Environment: GCP Linux version: CentOS 7 Laradock的初衷原是為了將Laravel環境容器化,但隨著時間的演進,慢慢包含了各種常用的工具了,如php-fpm, apache, nginx, mysql, phpmyadmin, redis等等這些常用的東
Thumbnail
Environment: GCP Linux version: CentOS 7 Laradock的初衷原是為了將Laravel環境容器化,但隨著時間的演進,慢慢包含了各種常用的工具了,如php-fpm, apache, nginx, mysql, phpmyadmin, redis等等這些常用的東
Thumbnail
Laravel Framework version: 8.12.3 本範例做了兩個,一個是進到首頁顯示hello world!,另一個是進到article頁面時,從資料庫把文章抓出來顯示。 ...
Thumbnail
Laravel Framework version: 8.12.3 本範例做了兩個,一個是進到首頁顯示hello world!,另一個是進到article頁面時,從資料庫把文章抓出來顯示。 ...
追蹤感興趣的內容從 Google News 追蹤更多 vocus 的最新精選內容追蹤 Google News