他還說,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客戶端,使用非常方便。