歡迎光臨
每天分享高質量文章

Redis 3.0.0正式版發佈,全新的分佈式高可用資料庫

Redis 3.0.0 正式版終於到來了!最重要的新特性是集群(Redis Cluster),提供Redis功能子集(比如不支持多資料庫)的分佈式、容錯的實現(最多支持1000結點)。

Salvatore ‘antirez’ Sanfilippo在Google Groups里表示,這是Redis的重要時刻。“我相信今天的Redis 3.0.0將以某種方式完全改變Redis的面貌。”他強調,人們將認識到Redis是一個全新的東西,它的自動擴展、容錯和高可用性都大大提高,從此能夠在更大範圍承擔更關鍵的任務。(我總結一下老大的意思吧:Redis翻開了歷史新的篇章……)

antirez還透露,內置的集群功能持續幹了很多年,雖然能找到一些時間密集開發,但也不時被其他特性完全打斷,現在終於完成了。他預計社區能用好這些功能,積累必要的經驗,還要一到兩年。

他還說,Redis 3.0.0實際上標志著一個新階段和新的開發樣式的開始。以後,大量已經開發的新功能將不再急於進入穩定版本,實際上Redis 3.0.0就放棄了很多新功能,回退到2.8,以保證新的穩定版本用戶能夠馬上使用。

他在帖子里重點提及的其他更新包括:

  • 新的”embedded string”物件編碼,提升快取命中率。在某些工作負載(尤其是管道化的高負載)下速度大幅提高。
  • 大大改進了回收鍵的LRU近似演算法。
  • AOF重寫功能被完全重新開發了,以減少行程最終將積累的緩衝寫入時,由於硬碟速度慢而導致的延遲。


而在發佈宣告中還列出瞭如下更新(相對於2.8):

  • WAIT command to block waiting for a write to be transmitted to the specified number of slaves.
  • MIGRATE connection caching. Much faster keys migraitons.
  • MIGARTE new options COPY and REPLACE.
  • CLIENT PAUSE command: stop processing client requests for a specified amount of time.
  • BITCOUNT performance improvements.
  • CONFIG SET accepts memory values in different units (for example you can use “CONFIG SET maxmemory 1gb”).
  • Redis log format slightly changed reporting in each line the role of the instance (master/slave) or if it’s a saving child log.
  • INCR performance improvements.


ITEye上powersoft同學之前翻譯了Redis 3.0的文件,雖然還沒有來得及更新,但還是有參考價值的:http://www.iteye.com/blogs/subjects/redis3。

Hacker News上antirez回答了社區提出的一些問題,頗有價值,整理翻譯如下。

Redis之外還有什麼其他更好的選擇啊?

(這問題讓antirez怎麼答,總不能不謙虛吧。仔細聽,他回答得很好。) 這得看使用場景,基本上還是就事論事、具體情況具體分析。程式員的本事不就體現在選擇正確的技術,然後在不同情況下優化嘛。你要考慮資料模型是否匹配所要解決的問題,運維因素,持久化保證,性能(需要多少個結點),可擴展性,是否簡單(搞這麼複雜以後會不會老要我來支持啊),等等。

其他同學提到了memcached,有人評論:現在memcached已經只相當於Redis最簡單的功能了,只能作為快取。Redis不僅能快取,還能承擔很多儲存任務。此外還有人提及HyperDex,但其ACID特性實現Warp是專有的產品。

此前的這個大型NoSQL比較文章,仍然有一定參考價值: http://kkovacs.eu/cassandra-vs-mongodb-vs-couchdb-vs-redis

有了Cluster,Sentinel是不是就廢啦。

還沒那麼快,Sentinel還在與Cluster並行繼續開發中。目前單實體場景下需要HA的話,它還是最佳選擇。但長遠(可能很長遠哦)看,我們會用Cluster解決Sentinel的使用場景,不過在那之前我們會很早就告訴大家的。

誰能給我更詳細地講講”embedded string”物件編碼是啥,它針對什麼工作負荷?能找到的文件都太老了。

這事兒簡單。一般Redis里會有包含型別欄位的物件結構,還有一個指標指向實際的物件表示。假設型別是REDIS_STRING,就得有指標指向一個”sds”字串(sds是字串庫用的名字)。

現在有了embedded string之後,就提供了一種特殊的字串物件,用一個位置保持物件結構和字串本身。這樣記憶體利用更有效,而且能夠大大改進記憶體本地性,所以差不多所有使用字串物件的東西(字串,或者比較大的要用字串物件作為集合值的集合物件)性能都更好。

這種特殊字串只用於小字串(工作負荷里大多數字串都不大)。

Redis


Redis是一個開源的高級key-value(鍵-值)快取與儲存,以高性能著稱。它也常被稱為資料結構服務器,因為其中的鍵可以存各種資料結構包括字串、散列、串列、集合、有序集合、位圖和hyperloglog。Redis的出現,很大程度補償了memcached這類KV資料庫的不足。不僅可以用於快取,也可以用於一些場景的儲存,在很多情況下是關係資料庫很好的補充。它提供了Python,Ruby,Erlang,PHP客戶端,使用非常方便。

作者:mengyidan1988

鏈接:http://www.iteye.com/news/30407

赞(0)

分享創造快樂