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