前言
接下來會開始研究一些 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。
通常設定快取資料最常不超過一小時。