原文:http://blog.hellolucky.info/articles/ruby-on-rails-ruby-and-redis-integration-of-resource/
一年多前 Ruby 和 Redis 整合資源沒這麼豐富的時候,我寫了一篇 [ Ruby on Rails ] Redis 相關 Gem介紹了一些當下僅有的 Gem,但事隔一年多,Redis 的資源越來越多,手邊也蒐集了一些觀察及使用名單,也許不全都屬於 Ruby,但相信對 Ruby 的使用者來說應該不是什麼問題。之前介紹的基本上大同小異我就不再贅述,這篇文章會把近一年來實用或是出名的工具做一些整理以及基本的介紹,如果在這份名單裡面有你愛用的工具而我沒推薦到的也歡迎提供!
非常適合提高 Redis 和 Rails 整合維護性的 Gem,可以把 Ruby 的 Hash 自動整合成 Redis 的 key!整合方式可參考 Redis Application Patterns In Rails 。
和 nest 類似的東西,但個人比較喜歡 nest。
類似 redis-objects 的 Gem,但使用上更單純簡單一點。
類似 redis-objects 的 Gem,但和 redis-objects 有一樣的問題,Redis 原生的指令就已經很好用了,他卻改變原本應有的操作方式,對於這類型 Gem 我沒有太多興趣。
非常棒的一個 Gem,可以把 Redis 當 Memcached 一樣整合到 Rails 的 Cache,如果不想一邊維護 Redis 一邊維護 Memcached 可以考慮使用他。
不錯的一個 Gem,但斷詞系統是以英文為主,不支援中文。
由對岸高手開發的 Redis search,功能強大且提供斷詞解決中文問題。
這是一套用 sinatra 寫的 autocomplete api server,可以輕易 mount 到 Rails app,同時也有提供jQuery Plugin。
這是用 PHP 仿 phpMyAdmin 寫的一套管理系統,也是因為 Redis 先天上的限制,這種類型的東西其實對 Redis 來講不太實用,Redis 是跑 single thread,這種類型的工具一個頁面要下的查詢指令非常龐大,如果在 production 使用容易拖累整體效能。
這是用 Ruby 寫的 Monitor,看起來好用但因為 Redis 先天性的限制,使用這類型的 Monitor 對於效能影響很大,所以使用上建議擷取一段時間做測試,而非常時間使用。
這是用 Python 寫的 Monitor,基本上同 redmon。
這是用 PHP 寫的 Monitor,基本上同 redmon。
這是用 Python 寫的 Monitor,基本上和前三種都一樣,但如果不排斥使用 command line,我最推薦使用這套去監測分析 Redis。
毛遂自薦一下,這是我寫的 logger,把 Redis 和 Rails 的 logger 做更深度的結合,方便分析每個 action 中 Redis 使用的時間。詳情可以參考 RedisLogger – a better redis logger for Rails application 。
由 Redis 作者本人開發,主要用來分析 Redis 內資料型態的組成。
這是 twitter release 的 Redis(Mencached) proxy,在內建 cluster 推出之前 Redis 最推薦的解決方案。
自動化處理 Redis failover 的工具。
把 redis dump 成 json 備份的工具。
這是 Redis base 的推薦系統,功能看似強大,但由於我目前沒此需求所以沒使用過,歡迎提供使用心得。
Redis 強大的特性非常適合用來擋 Spam,所以我用 Redis 加上 ImageMagick 寫了一個 Captcha Engine,詳情請看 簡單好用的驗證碼 Gem – Redis Captcha 。
由國人 poga 開發的 Message System,可參考 WaveBox, Redis-powered Messaging 。
列在上面的東西大概只玩了 70%,其餘不是沒興趣就是還沒有時間玩到,以下就就我的經驗來做點總結。
Integrate with Ruby( Rails ) 的部份,我推薦單純使用 redis-rb + nest 做結合,用原生的指令去控制所有事情,不建議使用類 ORM 的東西去掌控,一方面是無法顧及效率問題 (那用 Redis 幹嘛?),另一方面是把 key 的控制權交給類 ORM 的 Gem 我認為是一個很可怕的事情,所以我還是建議如果可以就使用 Redis 原生的指令。
Search & AutoComplete 的部份,redis-textsearch 不支援中文,redis-search 又太強大,加上我有特殊需求,所以正在用 Two ways of using Redis to build a NoSQL autocomplete search index 這篇文章所介紹的兩種方法實作輕量化並結合 MySQL 的 Search。
Admin, Monitor, Analytics 的部份,推薦直接使用 redis-cli 做管理,redis-faina 做原生的 Redis 監控與分析,如果是 Rails app,可以結合 redis_logger 去觀察 slow command。
其他像是 twemproxy、redis_failover 也是非常實用的工具 (不過我還沒認真玩過)。
如果對 Redis 有興趣,歡迎加入NoSQL Taiwan 的Redis Group 一起討論。 :)