【Redis】基本介紹與在 Windows Docker 上安裝


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。

Redis 的 Docker container
在 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
進入 Redis 的 Docker container 讀寫資料
從 Windows 命令提示字元進入 Redis 的 Docker container 讀寫資料

確認成功地讀寫資料。

下一篇:【Redis】常見的資料型態與相關操作指令

留言