https://www.pexels.com/zh-tw/photo/46274/
我們知道存取資料庫是一種 I/O 操作,所以速度會比較慢。因此開發高流量的服務時,在大量存取的情況下,勢必會面臨這種太慢的問題。
Redis 是一款開源的資料庫,由 C 語言撰寫。它特別的地方是在運行期間,資料都存放於記憶體中,故執行速度相當快。
本文將介紹 Redis,並解說在 Windows 系統上透過 Docker 來安裝與啟動的方式。
一、Redis 的好處
(一)讀取速度快
Redis 之所以快,原因是資料都在記憶體中,藉此達到如同「快取」(cache)的效果。
實務上可在查詢主要資料庫(如 MySQL)前,先查詢 Redis 是否有需要的資料。若有,從中取出即可,以減輕系統的壓力。若無,則再從資料庫查詢,並寫入 Redis。
而在主要資料庫中有新的資料寫入後(如有人留言),也能一同更新 Redis 中的資料(如留言數)。
(二)資料型別
Redis 有 5 種主要的資料型別。
- String(字串):是最基礎的型別。而數值資料也是存為 String。
- Hash(雜湊):可存放多個鍵值對(key-value),適合用來描述一個物件。
- List(列表):可存放 String。操作上與資料結構領域中的「佇列」(queue)類似。
- Set(集合):可存放 String,且資料不會重複。
- Sorted Set(有序集合):可存放一對一對的 String 與自定義的「分數」,且不會有重複的 String。可用於簡單的數值計算。
其他型別尚有 HyperLogLog、Bitmap、Streams 與 Spatial Index。但這些不在入門程度的討論範圍。
(三)獨立的服務
以 Spring 應用程式為例,當想存放快取資料時,我們大可簡單地宣告一個 HashMap,將資料往裡面放。然而應用程式被分配到的可用記憶體有其上限,若隨著資料量增長而導致記憶體不夠用,會發生「OutOfMemoryError」。
使用 Redis 後,不論是資料還是記憶體的管理,都獨立於 Spring 之外。甚至能讓多個應用程式共同存取。
二、下載並啟動 Redis
本節讓我們在 Windows 系統上使用 Docker 運行 Redis 的服務。由於 Docker 方面的操作不是本文的重點,因此筆者不會著墨太多。請讀者先安裝 Docker Desktop。安裝後,若有看到相關提示,再接續安裝 WSL。
成功啟動 Docker 後,請在命令提示字元(CMD)執行以下指令,下載 Redis 的 image。本文使用的版本為 7.0.8,其他版本可至 Redis 的 Docker Hub 查看。
docker pull redis:7.0.8
下載好 image 後,可在 Docker Desktop 中找到該版本的 Image ID 為「2f66aad5324a」。
接著執行以下格式的指令,即可將 image 建立成 container,並立即運行。
docker run -d -p 6379:6379 --name MyRedis 2f66aad5324a
以下說明指令中用到的參數。
- -d:在 CMD 背景運行 container。
- -p 6379:6379:將伺服器在 6379 port 收到的請求,轉發到 container 的 6379 port。
- --name "MyRedis":命名 container。
- 2f66aad5324a:指定 Image ID。
從 Docker Desktop 中,能確實看到 container 正在運行,點一下還可查看 log。
在 Docker Desktop 看見 Redis 的 container 啟動 |
三、使用命令列工具
在 log 中看到「Ready to accept connections」的訊息,代表已成功啟動 Redis。也請讀者在 CMD 透過「docker ps」指令確認 container 的 id。
接著讓我們試用看看,做個 hello world 的動作。Redis 的 container 內建命令列工具(Redis-cli),讀者可透過以下指令,先進入 container 所處的 Linux 環境,再啟動命令列工具。
docker exec -it {container_id} bash redis-cli
Redis 是以「鍵值對」(key-value)的形式儲存資料。其中 key 固定是字串,而 value 則能存放多種型別。請執行以下指令,存放一個鍵值對,再取出。
SET msg "Hello, world" GET msg
從 Windows 命令提示字元進入 Redis 的 Docker container 讀寫資料 |
確認成功地讀寫資料。
留言
張貼留言