大家好,我是 "為了拿到金角獎盃而努力著" 的文毅青年 - Kai
Chase Excellence,Sucess will follow.
作為 MessageQueue (簡稱MQ) 的第一個主題,果然還是想先學學 Redis,這一款號稱輕量、極高效率聞名的快取伺服器,也是入門 MQ 世界的好標的。
但是…
Redis 並不是 MQ!
Redis 並不是 MQ!
Redis 並不是 MQ!
很重要,強調三次!
Redis 是一個 分散式、支援持久化、使用 key-value 做資料處理的快取伺服器,或者應該用最熱門的詞彙來說明更貼切 – NoSQL
不懂 NoSQL 沒關係,等等下方會有一個簡單的介紹與比較。
總之,Redis 並非是專門做 MQ 的套件,但是它可以支援 MQ 的功能,也因為傳聞中它好學,Kai 才會當作 MQ 的第一個目標。
一般常見的 MySQL, Oracle, SQL 都是傳統關聯式資料庫(RDBMS),顧名思義其資料架構為由資料庫包覆資料表,表與表之間生成關聯型態以此鍵結資料關係的架構。
在這之中,資料庫與資料表的定義都是預先設置的,這表示資料存儲須要事先格式化過,才能確保資料的一致,從而能夠統整出碩大且工整的數據表。
雖然資料表可建立 index,但資料量越多還是會造成查詢效能上的低落
NoSQL (Not only SQL) 剛好相反,它不在乎資料內的物件型態是否一致,也不在乎資料與資料之間的關聯。你可以在一筆資料中增添五個物件,也可以指放入一個數值,這些都是被允許的事情。
與 RDBMS 相反的事實是,NoSQL 可以說更貼近真實資料的型態。
對於開發人員來說,作業上須要挑整重心在解析資料上,而減少部分存儲方面的工作。
然而,天秤的兩端總是平衡的,並沒有哪一種方式絕對好或壞,完全要端看業務的需求而定。
新創商業用 NoSQL 來做沒有問題。
金融保險就非得使用嚴謹的 RDBMS 才能符合規範。
以下是列出在 guru99 所寫的表格
Kai 覺得該位大神整理的很棒,在這也把它翻譯成中文,讓大家更好閱讀,中間可能穿插了部分個人的領悟和解讀,若對於內容有所疑慮不妨可以直接查看原文。
SQL | NoSQL | |
---|---|---|
定義 | 通常指 RDBMS,也稱傳統關聯式資料庫 | 非關聯式資料庫,或稱分布式資料庫 |
設計 | 使用結構化查詢語言做 OLAP(線上分析處理) | 各個不同的軟體皆是滿足特定需求而打造的,需要視情況做使用 |
使用語言 | SQL | 依照軟體不同 |
類型 | 基於資料表 | 基於 Key-Value |
架構 | 預定義架構 | 動態架構 |
擴展能力 | 可縱向擴展 (花費為指數線性成長) | 可橫向擴展 (花費為常數線性成長) |
常見軟體 | MySQL, Oracle, PostgresSQL, MS-SQL | MongoDB, Redis, , Neo4j, Cassandra, Hbase |
適合對象 | 時常需要高度複雜性查詢的業務 | 不適合複雜查詢 (適合快速、多量、簡單的查詢結果) |
變化 | 一種類型、多種變化 | 許多不同類型: Key-Value, 文檔, 圖型資料庫等 |
發展歷程 | 1970年起,主要尋求處理平面文檔的存儲的方式 | 2000年後,主要尋求補足SQL的缺點與高拓展性 |
開源程度 | 開源與鎖源的軟體都有 | 幾乎開源 |
軟體一致性 | SQL 軟體大多數相似 | 依照不同軟體有不同資料規範存儲的要求 |
適合的使用情景 | 需要解決 ACID 問題 | 需要解決資料可用性問題 |
重點目標 | 資料正確性比速度更重要時 | 速度比資料正確性更重要時 |
最佳選擇 | 當需要處理動態Query時 | 當需要根據變化進行拓展時 |
硬體選擇 | 專用的特規硬體 (Oracle Exadata等) | 一般硬體 |
網路選擇 | 高速網路 (Infiniband、Fabric Path等) | 一般網路 |
儲存選擇 | 高速儲存硬體設備 (SAN、RAID等) | 一般儲存硬體設備 (一般HDDs、JBOD) |
優勢 | 跨平台、安全、免費(MySQL等) | 容易使用、高性能、彈性 |
著名使用於商業的公司 | Hootsuite, CircleCI, Gauges | Airbnb, Uber, Kickstarter |
專業人員平均薪資(美國) | $84,328美金/年 (約253萬) | $72,174美金/年 (約216萬5千) |
講這麼多終於要進入正題…
Redis 是由 Salvatore Sanfilippo 使用 C 語言開發的 NoSQL,基於當時對 MySQL 效能低落的無奈與傳統 RDBMS 的使用束縛,Salvatore Sanfilippo 花了一年時間親手打造的了 Redis。
工程師的夢想: 看不順眼的事物,就自己建一個 (?
在 2009 年釋出第一版後,Redis 並沒有進行鎖源,而是開源。
這讓想擴充功能的工程師可以協助參與開發工作,因此 Redis 獲得了程式界廣大的回響,一直到 2020 年 Redis 已經發布到了版本 6.0,達到了面相多種不同語言的環境都能提供完整功能與服務的境界。
來自官方的圖片,可以看到 Redis 支援了許多不同類型的程式語言
所有存放進 Redis 的資料,都會被放置在 Redis 自己伺服器的主記憶體位置,這意味著資料並不需要進出磁碟,而 Redis 簡單的儲存結構也讓 CPU 能使用較少的資源取得同樣的結果。
這樣的結果就是,通常操作都可以在 一毫秒 內完成。
Redis 提供了多種常見的資料結構,如: String, Hash, List, Set, Sorted Set 等,最高可以保存單筆達 512 MB 的資料進入主記憶體中。
Redis 除了作為 NoSQL 形式的 DB 外,另外還有 Pub/Sub, Transactions 等好用的功能,能夠做到 MessageQueue、串流等業務
作為 NoSQL 一員的 Redis,也相同的使用主從式架構,橫向發展的方式讓其可以擴充許多從屬伺服器,增加讀取效能的同時也附帶將資料保持在記憶體空間中更久。
Redis 也支援非同步的復寫功能和時間點快照功能,兩者都可以幫助 Redis 發生問題時快速恢復資料
最一開始的介紹就有提到了,Redis 發展至今目前支援共 51 種語言,幾乎可以說是所有軟韌體工程師都可以使用的一個軟體。
Redis 作為一個 快取伺服器,理所當然地會有它需要去架構和連線的方式,而它儲存資料的方式也是我們常見的 Key-Value 形式。
打了好多,還是沒能介紹完整,而且中間還延伸不少話題… 哈
這篇篇幅不夠僅能做概略的介紹,下一篇文章 Kai 將會分享 Redis 的實務操作方式的學習心得
六角鼠年鐵人賽 Week 20 - Spring Boot - Redis 安裝與設定配置介紹
Redis
,w3HexSchool