Redis入門學習(上)

第一章 簡介

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有直接啓動和通過初始化腳本啓動兩種方式,分別使用與開發環境和生產環境

  1. 直接啓動

    直接運行redis-server即可啓動Redis

  2. 通過初始化腳本啓動Redis

    曾聽到過的一句經典名言:“世界上有一個偉大的東西叫百度,百度能教會你許多,學會百度是一種能力與技巧”

2.2.2 停止Redis

考慮到一個問題:Redis有可能正在將內存中的數據同步到硬盤中,強行終止Redis進程可能會導致數據丟失。正確停止Redis的方式是使用命令

redis-cli SHUTDOWN

執行命令,會先斷開所有客戶端連接,然後根據配置執行持久化,最後完成退出

2.3 Redis命令行客戶端

嘿嘿~ 這在我們學習和測試中非常重要

2.3.1 發送命令

打開cmd輸入命令,見圖所示

image

2.3.2 命令返回值

執行一條命令後,我們往往都會關心命令的返回值

  1. 狀態回覆

    是最簡單的一種回覆, 即狀態回覆直接顯示狀態信息

  2. 錯誤回覆

    當出現命令不存在或命令格式有錯誤等情況時,Redis會返回錯誤回覆(error reply)。錯誤回覆以(error)開頭,並在後面跟上錯誤信息

  3. 整數回覆

    Redis,沒有整數類型,但是提供了一些用於整數操作的命令,如遞增鍵值的INCR命令會以整數形式返回遞增後的鍵值。除此外,一些其他命令也很返回整數,例如獲取當前數據庫中鍵的數量時

  4. 字符串回覆

  5. 多行字符串回覆

下面一張圖,涵蓋了上面五種回覆

image

2.4 配置

設置端口號、是否開啓持久化、日誌級別等

曾聽到過的一句經典名言:“世界上有一個偉大的東西叫百度,百度能教會你許多,學會百度是一種能力與技巧”

2.5 多數據庫

通過前面的學習Redis是一個字典結構的存儲服務器,而實際上Redis實例提供了多個用來存儲數據的字典,客戶端可以指定將數據存儲在哪個字典中。

Redis默認支持16個數據庫,每個數據庫對外都是一個從0開始的遞增數字命名。可以通過修改配置來修改這一數字。客戶端與Redis建立連接後自動選擇0號數據庫

image

需要注意的幾點:

  1. 每個數據庫都是以編號制命名的,開發者必須自己紀錄哪些數據庫存儲了哪些數據
  2. 多個數據庫之間並不是完全隔離的,比如FlUSHALL命令可以情況一個Redis實例中所有數據庫中的數據,FLUSHDB情況當前數據庫中的數據
  3. Redis非常輕量級,一個空的Redis實例佔用的內存只有1MB左右,所有不用擔心多個Redis實例會額外佔用很多內存
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章