第一章 簡介
1.1 歷史與發展
曾聽到過的一句經典名言:“世界上有一個偉大的東西叫百度,百度能教會你許多,學會百度是一種能力與技巧”
1.2 Redis特性
1.2.1 存儲結構
Redis是REmote DIctionary Server(遠程字典服務器)的縮寫,它以字典結構存儲數據,並允許其他應用通過TCP協議讀寫字典中的內容。到目前爲止Redis支持的鍵值數據類型如下:
- 字符串類型
- 散列類型
- 列表類型
- 集合類型
- 有序集合類型
字典結構: 字典,在其他語言中也稱
map
,使用鍵-值對(key-value)
存儲,查找速度快。
字典是無序的對象集合,元素是通過鍵來存取的,而不是通過索引值存取。
字典是可變數據類型通俗易懂的講就是:你們使用微信小程序訪問接口時,傳輸數據給後臺給data,那個data就是字典結構
1.2.2 內存存儲與持久化
Redis數據庫中的所有數據都存儲在內存中。由於內存讀寫速度遠快於硬盤,因此Redis在性能上對比其他硬盤存儲的數據庫有非常明顯的優勢。在一臺普通的筆記本電腦上,Redis可以再一秒內讀寫超過10W個鍵值
那麼有一個問題,程序退出後,內存的數據會丟失,那這樣如何使得Redis持久化呢?
Redis可以在內存中的數據異步寫入到硬盤中,同時不影響繼續提高服務
1.2.3 功能豐富
Redis雖然是基於數據庫開發的,但是由於提高了豐富的功能,越來越多的人將其用做緩存、隊列系統等。
- Redis可以設置生存時間(Time To Live, TTL), 生存時間到期後鍵會自動被刪除,這一功能配合出色的性能讓Redis可以作爲緩存系統使用
- 作爲緩存系統,Redis可以限定數據佔用的最大內存空間,在數據達到空間限制後可以按照一定的規則自動淘汰不需要的鍵
- Redis的列表類型鍵可以用來實現隊列,並且支持阻塞式讀取,可以很容易地實現一個高性能的優先級隊列
1.2.4 簡單穩定
Redis直觀的存儲結構使得通過程序與Redis交互十分簡單。在Redis中使用命令來讀寫數據,命令語句之於Redis就相當於SQL語言之於關係數據庫
eg: 在關係數據庫中要獲取posts表內id爲1的記錄的title字段的值
SQL: SELECT title FROM posts WHERE id = 1 LIMIT 1
Redis: HGET post:1 title
此外,Redis提供了十幾種不同編程語言的客戶端庫,這些庫很好的封裝了Redis的命令,使得在程序中與Redis進行交互變得容易
第二章 準備
2.1 安裝Redis
2.1.1 在POSIX系統中安裝
曾聽到過的一句經典名言:“世界上有一個偉大的東西叫百度,百度能教會你許多,學會百度是一種能力與技巧”
2.1.2 在OS X系統中安裝
曾聽到過的一句經典名言:“世界上有一個偉大的東西叫百度,百度能教會你許多,學會百度是一種能力與技巧”
2.1.3 在Windows安裝
安裝包和安裝教程即可完成,操作很簡單
然後
曾聽到過的一句經典名言:“世界上有一個偉大的東西叫百度,百度能教會你許多,學會百度是一種能力與技巧”
2.2 啓動和停止Redis
命 令 | 說 明 |
---|---|
redis-server | Redis服務器 |
redis-cli | Redis命令行客戶端 |
redis-benchmark | Redis性能測試工具 |
redis-check-aof | AOF文件修復工具 |
redis-check-dump | RDB文件檢查工具 |
redis-sentinel | Sentinel服務器(2.8版以後) |
注: redis-cli是Redis自帶的Redis命令行客戶端,一般都用它進行學習和測試
2.2.1 啓動Redis
啓動Redis有直接啓動和通過初始化腳本啓動兩種方式,分別使用與開發環境和生產環境
-
直接啓動
直接運行redis-server即可啓動Redis
-
通過初始化腳本啓動Redis
曾聽到過的一句經典名言:“世界上有一個偉大的東西叫百度,百度能教會你許多,學會百度是一種能力與技巧”
2.2.2 停止Redis
考慮到一個問題:Redis有可能正在將內存中的數據同步到硬盤中,強行終止Redis進程可能會導致數據丟失。正確停止Redis的方式是使用命令
redis-cli SHUTDOWN
執行命令,會先斷開所有客戶端連接,然後根據配置執行持久化,最後完成退出
2.3 Redis命令行客戶端
嘿嘿~ 這在我們學習和測試中非常重要
2.3.1 發送命令
打開cmd輸入命令,見圖所示
2.3.2 命令返回值
執行一條命令後,我們往往都會關心命令的返回值
-
狀態回覆
是最簡單的一種回覆, 即狀態回覆直接顯示狀態信息
-
錯誤回覆
當出現命令不存在或命令格式有錯誤等情況時,Redis會返回錯誤回覆(error reply)。錯誤回覆以(error)開頭,並在後面跟上錯誤信息
-
整數回覆
Redis,沒有整數類型,但是提供了一些用於整數操作的命令,如遞增鍵值的INCR命令會以整數形式返回遞增後的鍵值。除此外,一些其他命令也很返回整數,例如獲取當前數據庫中鍵的數量時
-
字符串回覆
-
多行字符串回覆
下面一張圖,涵蓋了上面五種回覆
2.4 配置
設置端口號、是否開啓持久化、日誌級別等
曾聽到過的一句經典名言:“世界上有一個偉大的東西叫百度,百度能教會你許多,學會百度是一種能力與技巧”
2.5 多數據庫
通過前面的學習Redis是一個字典結構的存儲服務器,而實際上Redis實例提供了多個用來存儲數據的字典,客戶端可以指定將數據存儲在哪個字典中。
Redis默認支持16個數據庫,每個數據庫對外都是一個從0開始的遞增數字命名。可以通過修改配置來修改這一數字。客戶端與Redis建立連接後自動選擇0號數據庫
需要注意的幾點:
- 每個數據庫都是以編號制命名的,開發者必須自己紀錄哪些數據庫存儲了哪些數據
- 多個數據庫之間並不是完全隔離的,比如FlUSHALL命令可以情況一個Redis實例中所有數據庫中的數據,FLUSHDB情況當前數據庫中的數據
- Redis非常輕量級,一個空的Redis實例佔用的內存只有1MB左右,所有不用擔心多個Redis實例會額外佔用很多內存