memchached ( memcachier )使ってweb apiの戻り値キャッシュしてみた

環境用意するのが面倒なのでmemcachierの無料プラン試してみた
The easiest, most advanced managed memcache | MemCachier
利用登録すると接続情報もらえるので
まずはドキュメントのGetting Startedに乗ってるサンプルコードを動かす

require "dalli"
cache = Dalli::Client.new("servers".split(","),
                    {:username => "name",
                     :password => "pass",
                     :failover => true,
                     :socket_timeout => 1.5,
                     :socket_failure_delay => 0.2
                    })
cache.write("foo", "bar")
puts cache.read("foo")

エラーで動かん
dalliのソースみたらreadもwriteもなかったのでsetとfetchにかえたらいけた

cache.set("foo", "bar")
puts cache.fetch("foo")

でweb apiの戻り値を20秒キャッシュ

  @res ||= cache.fetch("p") do
    res = Dmm::Api.get({:keyword => "akb",:hits => hits,:sort => "rank",:offset => offset})
    cache.set("p",res,20)
    res
  end

いけたー
とおもったらページ遷移でバグってた
ページ毎にキャッシュを持つように変更

  @res ||= cache.fetch("p#{@page}") do
    res = Dmm::Api.get({:keyword => "akb",:hits => hits,:sort => "rank",:offset => offset})
    cache.set("p#{@page}",res,20)
    res
  end

こんどはいけた
速度はいまいちだけど、web apiに呼び出し回数制限あるときとか使えそう

参考
dalli/lib/dalli/client.rb at master · mperham/dalli · GitHub

The easiest, most advanced managed memcache | MemCachier
mperham/dalli · GitHub
examples-sinatra/app.rb at master · memcachier/examples-sinatra · GitHub