Redis 3.0.0 正式版終于到來了!最重要的新特性是集群(Redis Cluster),提供Redis功能子集(比如不支持多數(shù)據(jù)庫)的分布式、容錯的實(shí)現(xiàn)(最多支持1000結(jié)點(diǎn))。Salvatore ‘a(chǎn)ntirez’ Sanfilippo在Google Groups里表示,這是Redis的重要時刻?!拔蚁嘈沤裉斓腞edis 3.0.0將以某種方式完全改變Redis的面貌?!彼麖?qiáng)調(diào),人們將認(rèn)識到Redis是一個全新的東西,它的自動擴(kuò)展、容錯和高可用性都大大提高,從此能夠在更大范圍承擔(dān)更關(guān)鍵的任務(wù)。(我總結(jié)一下老大的意思吧:Redis翻開了歷史新的篇章……)antirez還透露,內(nèi)置的集群功能持續(xù)干了很多年,雖然能找到一些時間密集開發(fā),但也不時被其他特性完全打斷,現(xiàn)在終于完成了。他預(yù)計(jì)社區(qū)能用好這些功能,積累必要的經(jīng)驗(yàn),還要一到兩年。
他還說,Redis 3.0.0實(shí)際上標(biāo)志著一個新階段和新的開發(fā)模式的開始。以后,大量已經(jīng)開發(fā)的新功能將不再急于進(jìn)入穩(wěn)定版本,實(shí)際上Redis 3.0.0就放棄了很多新功能,回退到2.8,以保證新的穩(wěn)定版本用戶能夠馬上使用。
他在帖子里重點(diǎn)提及的其他更新包括:
新的”embedded string”對象編碼,提升緩存命中率。在某些工作負(fù)載(尤其是管道化的高負(fù)載)下速度大幅提高。
大大改進(jìn)了回收鍵的LRU近似算法。
AOF重寫功能被完全重新開發(fā)了,以減少進(jìn)程最終將積累的緩沖寫入時,由于硬盤速度慢而導(dǎo)致的延遲。
而在發(fā)布聲明中還列出了如下更新(相對于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.
詳情可以點(diǎn)擊 這里 查看。
ITEye上powersoft同學(xué)之前翻譯了Redis 3.0的文檔,雖然還沒有來得及更新,但還是有參考價值的:。
Hacker News上antirez回答了社區(qū)提出的一些問題,頗有價值,整理翻譯如下。
Redis之外還有什么其他更好的選擇啊?
(這問題讓antirez怎么答,總不能不謙虛吧。仔細(xì)聽,他回答得很好。) 這得看使用場景,基本上還是就事論事、具體情況具體分析。程序員的本事不就體現(xiàn)在選擇正確的技術(shù),然后在不同情況下優(yōu)化嘛。你要考慮數(shù)據(jù)模型是否匹配所要解決的問題,運(yùn)維因素,持久化保證,性能(需要多少個結(jié)點(diǎn)),可擴(kuò)展性,是否簡單(搞這么復(fù)雜以后會不會老要我來支持?。鹊?。
其他同學(xué)提到了memcached,有人評論:現(xiàn)在memcached已經(jīng)只相當(dāng)于Redis最簡單的功能了,只能作為緩存。Redis不僅能緩存,還能承擔(dān)很多存儲任務(wù)。此外還有人提及HyperDex,但其ACID特性實(shí)現(xiàn)Warp是專有的產(chǎn)品。
此前的這個大型NoSQL比較文章,仍然有一定參考價值:
有了Cluster,Sentinel是不是就廢啦。
還沒那么快,Sentinel還在與Cluster并行繼續(xù)開發(fā)中。目前單實(shí)例場景下需要HA的話,它還是最佳選擇。但長遠(yuǎn)(可能很長遠(yuǎn)哦)看,我們會用Cluster解決Sentinel的使用場景,不過在那之前我們會很早就告訴大家的。
誰能給我更詳細(xì)地講講”embedded string”對象編碼是啥,它針對什么工作負(fù)荷?能找到的文檔都太老了。
這事兒簡單。一般Redis里會有包含類型字段的對象結(jié)構(gòu),還有一個指針指向?qū)嶋H的對象表示。假設(shè)類型是REDIS_STRING,就得有指針指向一個”sds”字符串(sds是字符串庫用的名字)。
現(xiàn)在有了embedded string之后,就提供了一種特殊的字符串對象,用一個位置保持對象結(jié)構(gòu)和字符串本身。這樣內(nèi)存利用更有效,而且能夠大大改進(jìn)內(nèi)存本地性,所以差不多所有使用字符串對象的東西(字符串,或者比較大的要用字符串對象作為集合值的集合對象)性能都更好。
這種特殊字符串只用于小字符串(工作負(fù)荷里大多數(shù)字符串都不大)。
Redis
Redis是一個開源的高級key-value(鍵-值)緩存與存儲,以高性能著稱。它也常被稱為數(shù)據(jù)結(jié)構(gòu)服務(wù)器,因?yàn)槠渲械逆I可以存各種數(shù)據(jù)結(jié)構(gòu)包括字符串、散列、列表、集合、有序集合、位圖和hyperloglog。Redis的出現(xiàn),很大程度補(bǔ)償了memcached這類KV數(shù)據(jù)庫的不足。不僅可以用于緩存,也可以用于一些場景的存儲,在很多情況下是關(guān)系數(shù)據(jù)庫很好的補(bǔ)充。它提供了Python,Ruby,Erlang,PHP客戶端,使用非常方便。
更多信息請查看IT技術(shù)專欄