本篇文章是整理筆者在學習Redis時的入門篇,將探討如下幾點:mysql
關係型數據庫是按關係模型建立的數據庫,關係模型指"一對多,多對一,多對多",最終數據會持久化到磁盤上,其表明有MySQL,Oracle等redis
1. 二維表格對多維數據支持差sql
能夠多表關聯解決多維數據問題,但又會致使其可讀性差,特別是視圖,十幾張表關聯這種,還有查詢速度變慢,SQL優化時間成本上升等問題
2. 高併發下讀寫性能低數據庫
併發高的狀況(上萬次/s請求)易出現死鎖,讀寫性能降低嚴重,關係型數據庫能勉強應付高併發下的讀操做,但硬盤IO很難支持高併發下寫操做
3. 支撐容量有限緩存
社交類軟件如:微博、微信、Facebook天天會產生海量數據,以上軟件都擁有上億的用戶數量,其產生的數據天天不低於數十億計,若使用關係型數據庫在這裏面進行查詢...
4. 支撐容量有限安全
對數據庫升級一般須要停機維護和數據遷移
非關係型數據庫嚴格來講並非數據庫,而是許多數據結構存儲方法的集合,好比Redis就是包含了String,Hash,List,Set,ZSet五種數據格式,每一個數據格式又提供了一套API用於CRUD
其表明有:Redis,HBase,MongoDB微信
一般實際項目開發中,爲保證數據安全性、一致性、擴展性、高效性,都是關係型數據庫與NoSQL數據庫一塊兒使用的網絡
一般海量數據的持久化仍是用關係型數據庫進行存儲,再將熱點數據存儲在Redis中數據結構
Redis是非關係型數據庫中的鍵值存儲數據庫,支持操做五種數據類型字符串string,哈希hash,列表list,集合set,有序集合zset,可用於數據庫,緩存,消息代理多線程
(Redis的安裝,及每種數據類型的使用與應用場景,會在以後的《應用篇》中進行詳細的講解)
1. 緩存與數據庫雙寫一致性問題
2. 緩存雪崩、擊穿問題
這兩個問題一般在高併發項目中才會遇到,中小型傳統軟件企業並不常見 緩存雪崩:緩存同一時間大面積失效,新的請求直接訪問到數據庫,致使鏈接異常 緩存擊穿:一般是黑客惡意請求緩存中不存在的數據,全部請求直接訪問數據庫,致使鏈接異常
3. 緩存併發競爭問題
(以上問題的解決方案將涉及到:過時策略,內存淘汰機制,主從,哨兵,集羣,分佈式鎖等知識,將在以後的《進階篇》中進行講解)
筆者是使用的Redis 5.0.8進行學習和實踐,對於初學者建議選擇一個較新的穩定版本
目前Redis 6已經正式發佈了:引入了多線程 IO 特性對性能提高至少是一倍以上,感興趣的小夥伴能夠自行探索
如有不足,敬請指正虛心若愚,求知若渴