MO_or關於Redis入門篇

nosql-vs-sql-overview-1.png

1、引言

本篇文章是整理筆者在學習Redis時的入門篇,將探討如下幾點:mysql

  1. 什麼是關係型數據庫及其優劣
  2. 什麼是NoSQL(非關係型)數據庫及其優劣
  3. 什麼是Redis及其優劣
  4. Redis版本介紹

2、關係型數據庫

2.1 什麼是關係型數據庫

關係型數據庫是按關係模型建立的數據庫,關係模型指"一對多,多對一,多對多",最終數據會持久化到磁盤上,其表明有MySQL,Oracle等redis

2.2 關係型數據庫的優劣

優勢:

  1. 易理解,字段上有註釋,有數據模型圖
  2. 易使用,通用SQL語言操做方便,Mybatis還能夠用逆向工程生成代碼
  3. 易維護,社區體系龐大,功能豐富
  4. 支持SQL,可進行復雜查詢
  5. 適合常規數據分析,報表統計分析等

缺點:

1. 二維表格對多維數據支持差sql

能夠多表關聯解決多維數據問題,但又會致使其可讀性差,特別是視圖,十幾張表關聯這種,還有查詢速度變慢,SQL優化時間成本上升等問題

2. 高併發下讀寫性能低數據庫

併發高的狀況(上萬次/s請求)易出現死鎖,讀寫性能降低嚴重,關係型數據庫能勉強應付高併發下的讀操做,但硬盤IO很難支持高併發下寫操做

3. 支撐容量有限緩存

社交類軟件如:微博、微信、Facebook天天會產生海量數據,以上軟件都擁有上億的用戶數量,其產生的數據天天不低於數十億計,若使用關係型數據庫在這裏面進行查詢...

4. 支撐容量有限安全

對數據庫升級一般須要停機維護和數據遷移

3、NoSQL數據庫

3.1 什麼是NoSQL數據庫

非關係型數據庫嚴格來講並非數據庫,而是許多數據結構存儲方法的集合,好比Redis就是包含了String,Hash,List,Set,ZSet五種數據格式,每一個數據格式又提供了一套API用於CRUD
其表明有:Redis,HBase,MongoDB微信

3.2 NoSQL數據庫的優劣

優勢:

  1. 讀寫性能很高,不經過解析SQL,數據大部分存儲在緩存中
  2. 易擴展,數據格式基於鍵值對,耦合低
  3. 更豐富的數據存儲格式,鍵值(Redis),列(HBase),文檔(MongoDB),圖
  4. 易部署,成本低,大部分爲開源軟件
  5. 適合大數據量,高併發環境,如Web或其它網絡數據量的實時分析的應用程序

缺點:

  1. 社區還不夠完善,資源有限
  2. 不支持SQL,增長額外學習、使用成本
  3. 數據一致性不夠好,若業務對數據一致性要求高不建議使用,如金融行業中購買產品的業務

最後:

一般實際項目開發中,爲保證數據安全性、一致性、擴展性、高效性,都是關係型數據庫與NoSQL數據庫一塊兒使用的網絡

一般海量數據的持久化仍是用關係型數據庫進行存儲,再將熱點數據存儲在Redis中數據結構

4、Redis

4.1 什麼是Redis

Redis是非關係型數據庫中的鍵值存儲數據庫,支持操做五種數據類型字符串string,哈希hash,列表list,集合set,有序集合zset,可用於數據庫,緩存,消息代理多線程

(Redis的安裝,及每種數據類型的使用與應用場景,會在以後的《應用篇》中進行詳細的講解)

4.2 Redis的優劣

優勢:

  1. 高性能,全內存操做,單線程模式,讀寫性能很好
  2. 高併發,理論支持QPS 10W/S
  3. 高可用,主從複製,Redis集羣

缺點:

1. 緩存與數據庫雙寫一致性問題
2. 緩存雪崩、擊穿問題

這兩個問題一般在高併發項目中才會遇到,中小型傳統軟件企業並不常見
緩存雪崩:緩存同一時間大面積失效,新的請求直接訪問到數據庫,致使鏈接異常
緩存擊穿:一般是黑客惡意請求緩存中不存在的數據,全部請求直接訪問數據庫,致使鏈接異常

3. 緩存併發競爭問題

(以上問題的解決方案將涉及到:過時策略,內存淘汰機制,主從,哨兵,集羣,分佈式鎖等知識,將在以後的《進階篇》中進行講解)

4.3 Redis版本介紹

  • 版本號第二位若是是奇數,則爲非穩定版本(例如2.七、2.九、3.1)
  • 若是是偶數,則爲穩定版本(例如2.六、2.八、3.0、3.2),

筆者是使用的Redis 5.0.8進行學習和實踐,對於初學者建議選擇一個較新的穩定版本
目前Redis 6已經正式發佈了:引入了多線程 IO 特性對性能提高至少是一倍以上,感興趣的小夥伴能夠自行探索

5、參考

6、最後

如有不足,敬請指正虛心若愚,求知若渴

相關文章
相關標籤/搜索