1. 程式人生 > >NoSQL&&Redis介紹

NoSQL&&Redis介紹

neo4j 分布式系 memcached mongo 可用性 一個數 https 建立 訪問

  

技術分享圖片

  

  再說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介紹