最受歡迎的記憶體資料庫簡介?

簡單介紹Redis這種免費、開源NoSQL記憶體庫。對Rediis單機和Redis叢集分別作了簡要的介紹。

方法/步驟

1. Redis簡介

Redis是一個開源的、高效能的、基於鍵值對的快取與儲存系統,通過提供多種鍵值資料型別來適應不同場景下的快取與儲存需求。同時,Redis的諸多高階功能使其可以勝任訊息佇列、任務佇列、分散式鎖等不同角色。

為什麼要開發Redis記憶體資料庫?

2008年,義大利的一家創業公司Merzia推出了一款基於MySQL的網站實時統計系統LLOOGG。但是MySQL的效能並不能令人滿意,於是公司的創始人Salvatore Sanfilippo決定開發一款新型資料庫。這個資料庫就是Redis。Salvatore Sanfilippo於2009年完成Redis第一個版本的開發並將其開源。

2.Redis Cluster簡介

Redis Cluster是Redis官方的叢集實現方案。Redis作者在2014年10月9日開源提供Redis叢集功能的第一個RC版本,並在經歷了6個RC版本後,Redis官方於2015年4月1日推出了Redis Cluster第一個穩定版本。由於Redis Cluster穩定版本釋出的時間較晚,所以當前對Redis Cluster的分析還不是很多,且基於Redis Cluster生產環境的應用更少。

Redis官方文件說,Redis Cluster沒有使用consistent hashing進行資料分片,而是採用所謂的“雜湊槽”(hash slot)進行資料分片。

3.最終一致性

Redis在進行主從資料同步的時候,採用的是非同步複製策略,所以包含主從模式的Redis的資料一致性是最終一致性。

4. 叢集與單機的不同

在單機版的Redis中,每個Master之間是沒有任何通訊的,所以我們一般在Jedis客戶端或者Codis這樣的代理中做Pre-sharding。按照CAP理論來說,單機版的Redis屬於保證CP(Consistency & Partition-Tolerancy)而犧牲A(Availability),也就說Redis能夠保證所有使用者看到相同的資料(一致性,因為Redis不自動冗餘資料)和網路通訊出問題時,暫時隔離開的子系統能繼續執行(分割槽容忍性,因為Master之間沒有直接關係,不需要通訊),但是不保證某些結點故障時,所有請求都能被響應(可用性,某個Master結點掛了的話,那麼它上面分片的資料就無法訪問了)。

有了Cluster功能後,Redis從一個單純的NoSQL記憶體資料庫變成了分散式NoSQL資料庫,CAP模型也從CP變成了AP。也就是說,通過自動分片和冗餘資料,Redis具有了真正的分散式能力,某個結點掛了的話,因為資料在其他結點上有備份,所以其他結點頂上來就可以繼續提供服務,保證了Availability。然而,也正因為這一點Redis無法保證曾經的強一致性了。這也是CAP理論要求的,三者只能取其二。

相關問題答案