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
隨著理財資訊的普及,越來越多台灣人不再將資產侷限於台股,而是將視野拓展到國際市場。特別是美國市場,其豐富的理財選擇,讓不少人開始思考將資金配置於海外市場的可能性。 然而,要參與美國市場並不只是盲目跟隨標的這麼簡單,而是需要策略和方式,尤其對新手而言,除了選股以外還會遇到語言、開戶流程、Ap
Thumbnail
嘿,大家新年快樂~ 新年大家都在做什麼呢? 跨年夜的我趕工製作某個外包設計案,在工作告一段落時趕上倒數。 然後和兩個小孩過了一個忙亂的元旦。在深夜時刻,看到朋友傳來的解籤網站,興致勃勃熬夜體驗了一下,覺得非常好玩,或許有人玩過了,但還是想寫上來分享紀錄一下~
Thumbnail
CodeIgniter 3 和 Laravel 是兩種不同的 PHP 框架,各有其特點和適用場景。CodeIgniter 3 是一個輕量級框架,Laravel 是一個功能強大的現代 PHP 框架,同樣都有Models的它們有什麼樣的差別呢?
Thumbnail
在本章節中,我們探討了 PHP 中如何引用和管理套件。學習了如何使用 Composer 來安裝第三方套件,以及如何引用自定義模組。此外,我們還介紹了如何創建和使用自定義套件,並列舉了一些在 PHP 社群中常見且廣泛使用的套件和庫。通過掌握這些知識,開發者可以更有效地管理和利用各種資源。
Thumbnail
Ruby on Rails 是一個使用 Ruby 語言編寫的開源 Web 應用程式框架。 PostgreSQL 是一個強大、開源的物件關聯式資料庫系統,擁有超過 35 年的活躍開發歷程,並以其可靠性、功能強大性和效能而享有盛譽。 PostgreSQL 提供許多特定資料類型,以下是 Rails 支
Thumbnail
本文記錄如何在Kubernetes環境下,部署Standalone架構的MySQL Database,並透過phpmyadmin進行管理。這篇文章將分成MySQL部署在K8S內的優勢、部署MySQL DB standalone、部署PhpMyAdmin (PMA)、結論四個部分進行說明與實作的流程。
Thumbnail
Composer是PHP的軟體套件管理系統,它提供用於管理PHP軟體和依賴庫關係的標準格式。通常以專案為單位進行管理,會在專案根目錄底下(預設是vendor)安裝套件,除此外可以安裝全局套件。
Thumbnail
Codeigniter如果不調整設定,網址中會自帶index.php,為了符合MVC架構,通常會將它去除,本文將詳細說明處理步驟。
Thumbnail
PHP(全名為「PHP: Hypertext Preprocessor」)是一門開源的伺服器端程式語言,為動態網頁開發設計。閱讀本文將讓您瞭解PHP的特點、廣泛支援、易學性、資源豐富以及跨平臺性。
PHP(Hypertext Preprocessor)是一種流行的開源腳本語言,特別適用於網頁開發。它具有簡單的語法和易於理解的程式碼結構,並且支持多種數據庫系統和其他技術和框架集成。本文將介紹PHP的主要特點和廣泛應用性。
Thumbnail
Redis被稱為「資料結構伺服器」,因為其中的值(Value)可以是字串(String)、雜湊(Hash)、清單(List)、集合(Set)和有序集合(Sorted Set)等類型。 安裝 下載 wget https://download.redis.io/release/redis-6.
Migration在 Laravel 中是一種用來管理資料庫結構變更的機制。它的主要目的是使開發者能夠在應用程序的不同環境中保持資料庫結構的一致性,並輕鬆地進行結構變更
Thumbnail
隨著理財資訊的普及,越來越多台灣人不再將資產侷限於台股,而是將視野拓展到國際市場。特別是美國市場,其豐富的理財選擇,讓不少人開始思考將資金配置於海外市場的可能性。 然而,要參與美國市場並不只是盲目跟隨標的這麼簡單,而是需要策略和方式,尤其對新手而言,除了選股以外還會遇到語言、開戶流程、Ap
Thumbnail
嘿,大家新年快樂~ 新年大家都在做什麼呢? 跨年夜的我趕工製作某個外包設計案,在工作告一段落時趕上倒數。 然後和兩個小孩過了一個忙亂的元旦。在深夜時刻,看到朋友傳來的解籤網站,興致勃勃熬夜體驗了一下,覺得非常好玩,或許有人玩過了,但還是想寫上來分享紀錄一下~
Thumbnail
CodeIgniter 3 和 Laravel 是兩種不同的 PHP 框架,各有其特點和適用場景。CodeIgniter 3 是一個輕量級框架,Laravel 是一個功能強大的現代 PHP 框架,同樣都有Models的它們有什麼樣的差別呢?
Thumbnail
在本章節中,我們探討了 PHP 中如何引用和管理套件。學習了如何使用 Composer 來安裝第三方套件,以及如何引用自定義模組。此外,我們還介紹了如何創建和使用自定義套件,並列舉了一些在 PHP 社群中常見且廣泛使用的套件和庫。通過掌握這些知識,開發者可以更有效地管理和利用各種資源。
Thumbnail
Ruby on Rails 是一個使用 Ruby 語言編寫的開源 Web 應用程式框架。 PostgreSQL 是一個強大、開源的物件關聯式資料庫系統,擁有超過 35 年的活躍開發歷程,並以其可靠性、功能強大性和效能而享有盛譽。 PostgreSQL 提供許多特定資料類型,以下是 Rails 支
Thumbnail
本文記錄如何在Kubernetes環境下,部署Standalone架構的MySQL Database,並透過phpmyadmin進行管理。這篇文章將分成MySQL部署在K8S內的優勢、部署MySQL DB standalone、部署PhpMyAdmin (PMA)、結論四個部分進行說明與實作的流程。
Thumbnail
Composer是PHP的軟體套件管理系統,它提供用於管理PHP軟體和依賴庫關係的標準格式。通常以專案為單位進行管理,會在專案根目錄底下(預設是vendor)安裝套件,除此外可以安裝全局套件。
Thumbnail
Codeigniter如果不調整設定,網址中會自帶index.php,為了符合MVC架構,通常會將它去除,本文將詳細說明處理步驟。
Thumbnail
PHP(全名為「PHP: Hypertext Preprocessor」)是一門開源的伺服器端程式語言,為動態網頁開發設計。閱讀本文將讓您瞭解PHP的特點、廣泛支援、易學性、資源豐富以及跨平臺性。
PHP(Hypertext Preprocessor)是一種流行的開源腳本語言,特別適用於網頁開發。它具有簡單的語法和易於理解的程式碼結構,並且支持多種數據庫系統和其他技術和框架集成。本文將介紹PHP的主要特點和廣泛應用性。
Thumbnail
Redis被稱為「資料結構伺服器」,因為其中的值(Value)可以是字串(String)、雜湊(Hash)、清單(List)、集合(Set)和有序集合(Sorted Set)等類型。 安裝 下載 wget https://download.redis.io/release/redis-6.
Migration在 Laravel 中是一種用來管理資料庫結構變更的機制。它的主要目的是使開發者能夠在應用程序的不同環境中保持資料庫結構的一致性,並輕鬆地進行結構變更