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),通過這個分數進行排序。元素不允許重復,但是分數可以。
?
NoSQL&&Redis介紹