[Coscup] RUBY 上 REDIS 的四種寫法
講者: 丁盛豪 (網路代號: 東仙隊長)
1. redis-rb
redis.get、redis.set 最核心的 code 只有 5 行
redis get、set override 了 method missing
2. action cable 也用了 redis
rails 是多線程的 model 在 ruby 裡面 redis 是非同步的 i/o blocking response time 裡有百分之 90 都是 i/o blocking time
文件裡寫的 async 是 development mode 在 production mode 是非同步
3. EM-HIREDIS
event machine c 的 drive 在 ruby 綁定
用了很多 callback 做這件事 2019 JS 都不這麼寫了, 如果還這麼寫是不是很傻
講者重寫版本 midori-contrib 後期覺得自己維護太累了, 還要上班
沒多久出現了 falcon, 做的事跟講者幾乎一樣, 講者考慮將自己 gem 的一些部分核心 code 給 merge 進 falcon
4. ohm
大家都把 redis 當作 cache & counter
redis 官方說明, in-memory data structure store, used as a database, cache and message broker.
why do you use redus for cache
- single-threaded key-value database (easy to use)
- time-based mwssage broker (TTL support)
- rich data stucture support (LRU support)
- 圖靈完備 (Lua support)
gem ohm 停止維護一段時間了, 不過講者自己的經驗, 用 ohm 上 production 到現在四、五年了沒遇到什麼問題
用在風控系統 login token
也有用在氣象監控資料 (很固定時間會產出很多資料) 用了 ohm 可以把 reids 當關聯式資料庫來用
當然, redis 也有一些小問題 舊的資料應該要放到 disk 裡, 留新的資料當 hot data
redis 替代品:
Summary:
- 正視 ruby 上 redis 存在的效能問題
- 正確使用 ruby 上的 redis
- 發揮 ruby 的優勢用好 redis
- 將 ruby 的簡潔性和 reids 的簡潔性有效結合
補充: 簡單的分布式系統可以用 redis 當鎖
ohm 用在 production, 要 call 資料,正常是繼承 active record 改成繼承 ohm model
邊聽邊寫 如果有錯誤的地方, 請不吝指教, 謝謝