Redis 3.2.0 正式推出!
雖然比預期花了更多時間,但我們終於完成了,Redis 3.2.0 穩定版已正式推出,其中包含的變更可能對廣大 Redis 使用者帶來幫助。到目前為止,我已經多次介紹過這些變更,但最重要的幾項如下:
- GEO API。可依照經緯度為任何內容建立索引,並以半徑進行查詢,速度與易用性皆與其他 Redis 資料結構相同。你可以在此找到 API 文件:http://redis.io/commands/#geo。感謝 Matt Stancliff(麥特·史坦克利夫)提供了最初的實作,雖然經過重構,但仍是 GEO API 的核心,也感謝 ARDB 的開發者提供了麥特·史坦克利夫所使用的地理索引程式碼。
- 全新的 BITFIELD 指令可讓你將 Redis 字串用作由多個整數組成的位元陣列,每個整數的大小與偏移量皆可由使用者自行指定。它支援遞增與遞減操作,可將這些小(或大)整數當作計數器使用,並能精細控制溢位行為。http://redis.io/commands/bitfield。感謝 Yoav Steinberg(約阿夫·史坦伯格)推動這個瘋狂的點子,並激勵我撰寫實作。
- Redis Cluster 有諸多改進,包含 redis-trib 中的重新平衡功能,以及更完善的 replica 遷移能力。不過,對於 NAT 環境與 Docker 連接埠轉發的支援,雖然已在「unstable」分支中實作,但基於成熟度的考量,並未回溯移植至 3.2。
- Lua 腳本複寫的改進。現在可以使用「effects replication」來撰寫包含副作用的腳本。相關說明文件請見:http://redis.io/commands/EVAL。感謝 Yossi Gottlieb(尤西·戈特利布)促成此功能的加入,並在設計上提供協助。
- 我們現在擁有一個真正實用的 Lua 腳本除錯器:https://www.youtube.com/watch?v=IMvRfStaoyM,並已整合至 redis-cli。感謝 Itamar Haber(伊塔馬爾·哈貝爾),他自 Lua 腳本功能推出以來便撰寫了許多不簡單的腳本,非常期望這項功能並在開發過程中提供了協助。
- Redis 現在的記憶體使用效率更高,這要歸功於 Oran Agra(奧蘭·阿格拉)針對 SDS 與 Jemalloc size classes 設定所做的調整。此外,我們還擁有由麥特·史坦克利夫貢獻的全新 List 內部實作,其表示大型列表時僅需使用以往所需記憶體的一小部分!
- 最後,從節點與主節點在讀取操作期間對於哪些鍵已過期終於達成了一致。早就該如此了 :-)
- SPOP 現在接受選用的 count 參數。感謝 Alon Diamant(阿隆·迪亞曼特)提供了最初的實作。我後來為了效能而大致重寫了一遍,最終得到了一個相當快速的版本。
- RDB AUX 欄位。現在你的 RDB 檔案內會包含一些資訊,例如產生該檔案的伺服器、產生日期等。希望很快地(在 3.2.1 版中)redis-cli 就能解析這些欄位。這只是小量的工作,但老實說,我也是在寫這些說明時才想起這件事。
- RDB 載入現在更快了。
- Sentinel 現在可以擴展以監控更多 master,但應將其視為進階測試版而非穩定版,因此在部署前請務必在你的環境中仔細測試,Sentinel 內部有大量程式碼已更動。
- 還有許多其他更新,但這份清單已經夠長了。
衷心感謝所有讓此版本得以實現的貢獻者、可愛且給予鼓勵的 Redis 使用者社群,以及贊助了 3.2.0 大量開發工作的 Redis Labs。
在過去幾週,我們也著手開發一項有趣的新功能,將會在接下來的 Redis 版本中推出,並將於 5 月 10 日至 11 日在舊金山舉行的 RedisConf 2016 上發表,敬請期待!
關於穩定性的一點說明。我一直反覆強調,軟體的穩定性並非非黑即白。就像粉紅色、黃色和綠色一樣。開玩笑的,其實就是常見的灰色地帶。所以 3.2.0 看起來相當穩固,但畢竟仍是新鮮出爐的版本。請逐步開始使用,觀察它在你的環境中的運作情形,並請即時回報任何問題。不過話說回來,由於它已在 RC 階段停留了很長一段時間,那些迫切需要新功能而搶先部署的勇敢使用者們其實已經對它進行了測試。
3.2.0 的完整變更日誌在此:https://raw.githubusercontent.com/antirez/redis/3.2/00-RELEASENOTES
你可以透過 http://download.redis.io 取得 Redis 3.2.0 的 tarball,或是從 Github 上 antirez/redis 儲存庫取得 3.2.0 標籤。
祝使用愉快!
隨機一篇部落格