redis とは

インストール

   1  % gem install ohm

セットアップ

   1  require 'ohm'
   2  Ohm.connect(:port=>6379)

モデル

   1  class Video < Ohm::Model
   2    attribute :url
   3    attribute :created_at
   4    set :tags
   5  
   6    index :url    # 検索対象には全てindexを作成する
   7    index :tags   # 検索対象には全てindexを作成する
   8  end

  • pkeyのidが勝手に定義される
  • redisで利用可能なvalueの型は、文字列と集合
  • Ohmでは文字列型を attribute で定義する
  • Ohmでは集合型を set で定義する
  • Ohmではさらに独自の list(順序付き集合), counter(増減のみ操作可能な数値) 型が利用可能

使用例

   1  video = Video.new(:url=>"http://www.you...", :tags=>"愛理")
   2  video.save
   3  video.tags << "cute"
   4  
   5  Video.find(:tags=>"cute")
   6  => #<Index: ["1", "2"]>
   7  
   8  Video.find(:tags=>"cute").last.tags
   9  => #<Set: ["cute", "愛理"]>

低レベルAPI

Object-Hash ではなく、純粋に redis の KVS 用 API として利用する場合。

   1  Ohm.redis.get "Foo"         # => nil
   2  Ohm.redis.set "Foo", "xxx"  # => "OK"
   3  Ohm.redis.get "Foo"         # => "xxx"

長所

  • redisのKVS性能が高いので単純レコードへの参照・記録は超高速
  • 集合型を持つのでタグの扱いなどが凄く便利
  • スキーマレスでとっつきやすい
  • 各操作がアトミックなのでロックがない

短所(redis)

  • 文字列型のみ(数値や日付を入れても範囲検索できないので実用的ではない)
  • 検索機能が貧弱 (文字列の完全一致のみ)
  • データ保存が async
  • もちろんトランザクション処理もなし

保存時間の間隔を設定できるとは言え、基本 async なのでクラッシュによるデータ損失の危険性が常にある。 その意味では、RDBのようなしっかりとしたデータストレージでなく、 前回の状態を(運が良ければ)そのまま再開してくれる memcached という認識(利用)がよさそう。

短所(Ohm)

  • 予約語チェックがなく、id 属性を指定すると謎の挙動でハマる
  • new record 時に集合型を参照するとエラー

など使い辛い

posted by Png maiha on Mon 22 Feb 2010 at 07:40
Contents
[NoSQL] Ohm (redis用のORM) の使い方
Comments
瀧内元気: MacOS版は以下にあります * [genki/ViMouse](https://githu... '23-1
KingofSmack: Here also good reads for this mobile applicatio... '14-5
Spencer: You don't have to re-compile it, this version w... '14-4
staiano: Any chance we can get a recompile for 10.9? '14-1
dsjf: https://gist.github.com/6bf1bf2c3cbb5eb6e7a7 これ... '13-1
Services from s21g
twpro(ツイプロ)
Twitterプロフィールを快適検索
地価2009
土地の値段を調べてみよう
MyRestaurant
自分だけのレストラン手帳
Formula
ブログに数式を埋め込める数式コミュニティ