Ruby 逆引きレシピ レシピ103

Ruby 逆引きレシピ すぐに美味しいサンプル&テクニック 232 (PROGRAMMER’S RECIPE)

Ruby 逆引きレシピ すぐに美味しいサンプル&テクニック 232 (PROGRAMMER’S RECIPE)

今日はレシピ 103 を読みました。

memcached のところです。今日は1レシピだけに専念して memcached をインストールして少し触ってみました。

勉強用の環境は Mac OS X だったので、以下でサーバと ruby 版のクライアントライブラリをインストールしました。

$ sudo port install memcached
$ gem install memcache-client

レシピ本にあるとおり触ってみるとクライアントからは Hash のような使い心地でした。レシピ本には書かれていませんでしたが、Hash と同じように [ ], [ ]=, fetch などのメソッドも利用可能でした。ただし Hash#fetch と違って MemCache#fetch はキーが未登録でも nil を返します(Hash#fetch は例外を発生)。もちろん memcached サーバに値が保存されているので、別のプロセスからも値の取り出しや更新ができて反映されます。

cache = MemCache.new("localhost:11211", namespace: "my_namespace")
cache.set("key1", "value1", 60)
cache.set("key2", "value2", 60)
cache.get("key1") #=> "value1"

cache["key3"] = "value3"
cache["key3"]       #=> "value3"
cache.fetch("key4") #=> nil

ちょっとおもしろいと思ったのは、set の第3引数に値の有効期限の指定があることです。秒数で指定して、この時間を過ぎると値が消えるみたいでした。memcache というくらいなので一時的なキャッシュ用なんですね、なるほど。 0 を指定することで有効期限をなしにすることもできるそうです。

あとは更新が同時に行なわれたらどうするのかとか、複数サーバを起動して、一部を落としても動作するかとかいったあたりがおもしろそうですが、それらはあらためて調べてみたいと思います。