Redis: Your utility belt, just like batman!

標題代表著最近幾次玩弄Redis的感想

Redis在最近當紅的NoSQL database中算是一個異類(事實上,許多人根本不把它當作一個database來看待),資料完全存在記憶體中,沒有auto sharding,沒有relation,甚至連處理persistent的機制都相當單純。缺少這麼多東西,Redis吸引人的到底是什麼?

  1. 超高的效能:100000 sets/second,80000 gets/second(source)。就算在我的爛macbook上也是輕鬆做到每秒數萬次寫入。
  2. 各式資料結構:任何有基礎程式設計能力的人,都知道選擇一個適合的資料結構的重要性。Redis給你現成的List, Set, Hash, SortedSet…等等,讓Redis用起來就像你的程式中的一個簡單的物件一樣。Ruby裡面你有現成的hash, array, set可以用,Redis用起來也差不多。這些資料結構要如何互相支援,對程式設計師來說也是早就有著相當的理解。因此你不需要另外學一套處理資料的思考模式,只要你有基本的資料結構知識,使用Redis應該是幾乎沒有門檻可言。網路上有相當多利用Redis這些資料結構的例子,我就不多提了。
  3. Atomic Operation:Redis提供了豐富的操作指令,從基本的incr到複雜的ZREVRANGEBYINDEX都有,而且這些操作都是Atomic Operation。由於實際上你常常會把Redis當做是shared memory來使用,atomic就成為了相當重要的特性。
  4. 簡單:compile redis甚至不需要configure,光這點就讓我眼睛亮了一下 XD。make下去你就有redis-server的執行檔可用了,沒有複雜的系統配置。

最近的心得是,Redis帶著強烈的Law of the Instrument(如果你手上有著搥子,在你眼中什麼都看起來像釘子。)在寫Web的東西的時候,常常會需要存一些資料,像是log,即時的數據,Preference…等等。這些資料沒有複雜到需要分析一下ER model,存到MySQL裡面也有點麻煩。Redis在這種時候就非常的好用。也很適合拿來搭建各種系統,像是Resque

實際使用時,Redis就像是你在一堆process與server實體機器之間有一塊shared memory。不僅高效能、也有實用的資料結構。有許多人寫下了實戰的心得:Rubygems.orgPlurk等等。

總之,目前我並不認為Redis是可以完全取代Database用途的東西。但是Redis絕對是一個相當實用的東西,切中了原本Web development缺少的一塊。Redis本身也還有許多有趣的發展,像是最令人期待的Redis Cluster。作者做的許多嘗試也相當有趣,Redis有個branch甚至提供了lua scripting!想知道Redis背後的精神的話,可以看看這篇Redis Manifesto

Advertisements

Redis: Your utility belt, just like batman!” 有 1 則迴響

迴響已被關閉。