redis初識(一)
- 1.了解NoSql
-
- 1.1 什麼是Nosql
- 1.2 為什麼要使用NoSql
- 1.3 NoSql資料庫的優勢
- 1.4 常見的NoSql産品
- 2.Redis介紹
-
- 2.1什麼是Redis
- 2.2 Redis優勢
- 2.3 Redis應用場景
- 2.4 Redis下載下傳
1.了解NoSql
1.1 什麼是Nosql
NoSQL,泛指非關系型的資料庫。随着網際網路web2.0網站的興起,傳統的關系資料庫在處理web2.0網站,特别是
超大規模和高并發的SNS類型的web2.0純動态網站已經顯得力不從心,出現了很多難以克服的問題,而非關系型的
資料庫則由于其本身的特點得到了非常迅速的發展。NoSQL資料庫的産生就是為了解決大規模資料集合,多重資料 種類帶來的挑戰,尤其是大資料應用難題。 NoSQL最常見的解釋是“non-relational”, “Not OnlySQL”也被很多人接受。NoSQL僅僅是一個概念,泛指非關系 型的資料庫,差別于關系資料庫,它們不保證關系資料的ACID特性。
1.2 為什麼要使用NoSql
傳統的資料庫遇到的瓶頸
傳統的關系資料庫具有不錯的性能,高穩定型,久經曆史考驗,而且使用簡單,功能強大,同時也積累了大量的成功案例。在網際網路領域,MySQL成為了絕對靠前的王者,毫不誇張的說,MySQL為網際網路 的發展做出了卓越的 貢獻。
在90年代,一個網站的通路量一般都不大,用單個資料庫完全可以輕松應付。在那個時候,更多的都是 靜态網頁,動态互動類型的網站不多。
到了最近10年,網站開始快速發展。火爆的論壇、部落格、sns、微網誌逐漸引領web領域的潮流。在初 期,論壇的流
量其實也不大,如果你接觸網絡比較早,你可能還記得那個時候還有文本型存儲的論壇程 序,可以想象一般的論壇 的流量有多大。
現在網站的特點:
(1) 高并發讀寫
Web2.0網站,資料庫并發負載非常高,往往達到每秒上萬次的讀寫請求
(2) 高容量存儲和高效存儲
Web2.0網站通常需要在背景資料庫中存儲海量資料,如何存儲海量資料并進行高效的查詢往往是一個 挑戰
(3) 高擴充性和高可用性
随着系統的使用者量和通路量與日俱增,需要資料庫能夠很友善的進行擴充、維護
1.3 NoSql資料庫的優勢
(1) 易擴充
NoSQL資料庫種類繁多,但是一個共同的特點都是去掉關系資料庫的關系型特性。資料之間無關系,這
樣就非常容易擴充。也無形之間,在架構的層面上帶來了可擴充的能力。
(2)大資料量,高性能
NoSQL資料庫都具有非常高的讀寫性能,尤其在大資料量下,同樣表現優秀。這得益于它的無關系性,
資料庫的結構簡單。一般MySQL使用Query Cache,每次表的更新Cache就失效,是一種大粒度的
Cache,在針對web2.0的互動頻繁的應用,Cache性能不高。而NoSQL的Cache是記錄級的,是一種細
粒度的Cache,是以NoSQL在這個層面上來說就要性能高很多了。
(3)靈活的資料模型
NoSQL無需事先為要存儲的資料建立字段,随時可以存儲自定義的資料格式。而在關系資料庫裡,增删
字段是一件非常麻煩的事情。如果是非常大資料量的表,增加字段簡直就是一個噩夢。這點在大資料量 的web2.0時代尤其明顯。
(4) 高可用
NoSQL在不太影響性能的情況,就可以友善的實作高可用的架構。比如Cassandra,HBase模型,通過 複制模型也能實作高可用。
1.4 常見的NoSql産品
1.鍵值(Key-Value)存儲資料庫
相關産品: Tokyo Cabinet/Tyrant、Redis、Voldemort、Berkeley DB
典型應用: 内容緩存,主要用于處理大量資料的高通路負載。
資料模型: 一系列鍵值對
優勢: 快速查詢
劣勢: 存儲的資料缺少結構化
2.列存儲資料庫
相關産品:Cassandra, HBase, Riak
典型應用:分布式的檔案系統
資料模型:以列簇式存儲,将同一列資料存在一起
優勢:查找速度快,可擴充性強,更容易進行分布式擴充
劣勢:功能相對局限
3.文檔型資料庫
相關産品:CouchDB、MongoDB
典型應用:Web應用(與Key-Value類似,Value是結構化的)
資料模型: 一系列鍵值對
優勢:資料結構要求不嚴格
劣勢: 查詢性能不高,而且缺乏統一的查詢文法
4.圖形(Graph)資料庫
相關資料庫:Neo4J、InfoGrid、Infinite Graph
典型應用:社交網絡
資料模型:圖結構
優勢:利用圖結構相關算法。
劣勢:需要對整個圖做計算才能得出結果,不容易做分布式的叢集方案。
2.Redis介紹
2.1什麼是Redis
全稱:REmote DIctionary Server(遠端字典伺服器)。是完全開源免費的,用C語言編寫的, 遵守BCD協定。是一個高性能的(key/value)分布式記憶體資料庫,
基于記憶體運作并支援持久化的NoSQL資料庫,是目前最熱門的NoSql資料庫之一,也被人們稱為資料結構伺服器。
Redis 與其他 key - value 緩存産品有以下三個特點:
(1) Redis支援資料的持久化,可以将記憶體中的資料保持在磁盤中,重新開機的時候可以再次加載進行使用
(2) Redis不僅僅支援簡單的key-value類型的資料,同時還提供list,set,zset,hash等資料結構的存儲
(3) Redis支援資料的備份,即master-slave(主從)模式的資料備份
2.2 Redis優勢
(1) 性能極高 – Redis能讀的速度是110000次/s,寫的速度是81000次/s 。
(2) 豐富的資料類型 –Redis支援二進制案例的 Strings, Lists, Hashes, Sets 及 Ordered Sets 資料類型操作。
(3)原子 – Redis的所有操作都是原子性的,同時Redis還支援對幾個操作全并後的原子性執行。
(4) 豐富的特性 – Redis還支援 publish/subscribe, 通知, key 過期等等特性
(5)采用單線程,避免了不必要的上下文切換和競争條件,也不存在多程序或者多線程導緻的切換而消耗 CPU,不 用去考慮各種鎖的問題,不存在加鎖釋放鎖操作,沒有因為可能出現死鎖而導緻的性能消耗;
(6) 使用多路I/O複用模型,非阻塞IO;
2.3 Redis應用場景
(1) 緩存(資料查詢,短連接配接,新聞内容,商品内容等),使用最多
(2) 聊天室線上好友清單
(3) 任務隊列(秒殺,搶購,12306等)
(4) 應用排行榜
(5) 網站通路統計
(6) 資料過期處理(可以精确到毫秒)
(7) 分布式叢集架構中的session問題
2.4 Redis下載下傳
(1)Http://redis.io/ 英文位址
(2)Http://www.redis.cn/ 中文位址