前言

接下來會開始研究一些 Nosql DB,第一個就從比較貼近現況使用的Redis開始,這邊大部分都是個人筆記要點,稍有遺漏或是不夠專業的地方還請多多包涵。

本文

Redis基本介紹

特點:

  • 儲存資料是由 Key-Value 所組成。
  • 資料儲存在記憶體內。
  • Single Thread I/O Multiplex。

1、儲存資料是由Key-Value所組成。

一般我們使用的 SQL 資料庫如:MSSQL、MySQL 等,是屬於表格的方式儲存,傳統稱之為結構化數據。
而Redis這類的 NoSQL 儲存資料為非表格化的儲存,稱之半結構化或非結構化的數據。

簡單來說,在 Redis 內一組 Key 對應一組 Value。

2、資料儲存在記憶體內。

資料都是儲存在記憶體內,所以比起傳統 DB 可以達到更快速存取的機制。
但也不是全部都只能放在記憶體,Redis 也支援存放永久機制的資料,這部分就會使用到硬碟,這點請慎用。

注意要點:
因為資料是存放在記憶體內,並不適合什麼東西都直接往 Redis 塞,稍一不甚使用就會悲劇。
string 類型控制在10KB以內,hash、list、set、zset 元素個數不要超過 5000。

3、Single Thread I/O Multiplex。

Single Thread 意味著不管裝載 Redis 的 Server 上有幾顆Cpu核心,一個 Redis DB 就只會使用到一個核心。
(新版的 Redis 似乎有支援多核心,但並沒有多加研究,歡迎自己探查。)

一次只能使用一個 Cpu 的核心也就意味著一次只能接收一個 Request,所以當有某一個 Request 佔用了太長的時間就會導致 Redis 無法應付其他的 Request,這也跟上面第二點資料的存放大小有關。

使用情景:
傳統的程式如果要做快取通常第一選項都會直接使用本機的 memory cache,但在分散式的架構下,當大家需要共用 cache 時,通常都會選擇使用 Redis 來當作快取資料庫。

安裝說明

這邊我們會使用 docker 來進行安裝 Redis。

首先要下載 Redis,這邊不指定版本預設就是下載最新版。

docker pull redis

下載完後就可以執行 Image。
設定執行 container 的名字為 redis-test,port 為 6379,並設定背景執行。

docker run --name redis-test -p 6379:6379 -d redis

可以使用 docker ps 觀看目前運行的 container。

測試

首先要先進到 Redis-cli。

第一步我們要指定使用 Redis 的 container。 55d5 是縮上面 containerId 的縮寫。

docker exec -it 55d5 bash

接下來輸入以下指令,就可以看到我們已經連入 Redis 可以開始下指令了。

redis-cli

Redis 提供一些簡單的指令供我們測試。
輸入:

Ping

Redis 回應 Pong。

測試簡單資料儲存。
輸入:

set test "This is my first Redis Data"

取得資料

get test

管理工具

喜歡 GUI 的朋友有福了,這邊也有提供了 GUI 介面的管理方式。
Another Redis Desktop Manager

安裝完成後打開介面如下

接下來點選左上角建立連線。

建立成功點開 Server 就會看到以下視窗。

點選 test 就會看到我們剛剛存放的第一筆資料,TTL 代表著他還有多久過期,-1 則代表永久存在。

-1 這種永久存在的資料就會占用到硬碟空間,同時也會增加 I/O 讀取得時間,所以並不建議放這種資料在 Redis。

通常設定快取資料最常不超過一小時。

參考資料