Redis 3.0.0 正式版終于到來了!最重要的新特性是集群(Redis Cluster),提供Redis功能子集(比如不支持多數據庫)的分布式、容錯的實現(最多支持1000結點)。
Salvatore 'antirez' Sanfilippo在Google Groups里表示,這是Redis的重要時刻?!拔蚁嘈沤裉斓腞edis 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回答了社區提出的一些問題,頗有價值,整理翻譯如下。
這是不是愚人節笑話???
非也,我們一向有在4月1日發布的傳統。去年HyperLogLog支持也是4月1日發布的嘛。而且那次因為HyperLogLog名字太科幻,好多人怎么都不肯相信這居然不是愚人節笑話呢。
再說,開源軟件嘛,怕什么愚人節,你下載代碼看看不就啥都知道了。
Redis之外還有什么其他更好的選擇?。?/strong>
?。ㄟ@問題讓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客戶端,使用非常方
便。
原文鏈接:http://www.lupaworld.com/portal.php?mod=view&aid=251638
原創文章,作者:追馬,如若轉載,請注明出處:http://www.www58058.com/2399
終于有集群大招了 ~普大喜奔