當前位置:
首頁 > 知識 > NoSQL&Redis介紹

NoSQL&Redis介紹

再說Redis之前,想先說一下NoSQL。在最早的單機時代,隨著數據的增加一台機器可能放不下了。同時索引佔用的內存空間也會越來越大。對請求的讀寫操作影響很大。於是就在資料庫之前增加了一層保護層 — 緩存。另外由於關係型資料庫MySQL、Oracle等在某些場景下讀寫效率較差,靈活性較低,I/O瓶頸限制。使得NoSQL應用的越來越廣泛。

NoSQL

NoSQL, Not Only SQL,也就是我們所說的非關係型資料庫。常用的有Redis、Memcached、MongoDB等。

NoSQL資料庫具有強大的讀寫性能,主要原因還是因為它的無關係性,數據結構相對簡單。比如MySQL這樣的關係型資料庫我們需要實現建立好表結構,如果需要增加欄位還需要通過alert table來進行新增。但是非關係型資料庫就沒有這麼麻煩。我們可以隨時自定義數據格式。

資料庫比較

關係型資料庫

結構化查詢語言(SQL語句)

嚴格的一致性

基礎事物非關係型資料庫

沒有特定的查詢語言

有K-V存儲,列存儲,文檔存儲,圖形資料庫

最終一致性

非結構化和不可預知的數據

高性能,高可用和伸縮性

CAP原則,指的是在一個分散式系統中,Consistency(一致性)、 Availability(可用性)、Partition tolerance(分區容錯性)NoSQL四大分類

KV鍵值對,如Redis。用於內容緩存,主要用於處理大數據的高訪問負載,也用於一些日誌系統等.

列存儲資料庫,如HBase。分散式的文件系統。

文檔性資料庫,如MongoDB。主要用於WEB應用。也是k-v結構的。

圖形資料庫,如Neo4J。主要用於社交網路,推薦系統等.Redis

Redis:Remote Dictionary Server (遠程字典伺服器)。

是一個用C語言編寫的,開源的,高性能的(K/V)分散式內存資料庫。

特點:

支持數據的持久化

支持豐富的數據類型,String、List、Hash、Set、Zset

支持數據備份,即master-slave

單線程且支持事物應用場景:

由於可以持久化,因此可以用來存儲數據。

消息隊列系統

社交關係(如,共同關注的人,粉絲列表等)

排行榜、熱點新聞列表

秒殺系統為什麼那麼快:

Redis是純內存操作,需要的時候需要我們手動持久化到硬碟中

Redis是單線程,從而避開了多線程中上下文頻繁切換的操作。

Redis數據結構簡單、對數據的操作也比較簡單

使用底層模型不同,它們之間底層實現方式以及與客戶端之間通信的應用協議不一樣,Redis直接自己構建了VM 機制 ,因為一般的系統調用系統函數的話,會浪費一定的時間去移動和請求

使用多路I/O復用模型,非阻塞I/OI/O 多路復用技術是為了解決進程或線程阻塞到某個 I/O 系統調用而出現的技術,可以監視多個描述符,一旦某個描述符就緒(一般是讀就緒或者寫就緒,就是這個文件描述符進行讀寫操作之前),能夠通知程序進行相應的讀寫操作

Redis的數據類型

Redis支持豐富的數據類型

String

字元串是最基本的一個數據類型,String是二進位安全的,也就是說String可以包含任何數據,因此我們可以存放序列化之後的對象或者是圖片內容。

一條redis數據可以存放最大的字元串為512M。

Hash

我們可以把他理解為Java中的map,Python中的dict。是一個鍵值對的集合。適合於存儲對象

List

是一個字元串的集合,默認按照插入順序排序,我們也可以通過不同的命令將數據插入到集合的頭部或者尾部

Set

用於存放無序不重複的集合,集合中最大的成員數為 232 - 1 (4294967295,每個集合可存儲40多億個成員)。

Zset

即 sorted set ,有序不重複集合。每個元素都會有一個對應的double類型的分數(score),通過這個分數進行排序。元素不允許重複,但是分數可以。


喜歡這篇文章嗎?立刻分享出去讓更多人知道吧!

本站內容充實豐富,博大精深,小編精選每日熱門資訊,隨時更新,點擊「搶先收到最新資訊」瀏覽吧!


請您繼續閱讀更多來自 千鋒JAVA開發學院 的精彩文章:

大數據思維的十大核心原理

TAG:千鋒JAVA開發學院 |