hitode909の日記

以前はプログラミング日記でしたが、今は子育て日記です

cached-open.rb

外部のウェブサイトなどをスクレイピングするようなプログラムを書いているとき,大量にリクエストを送るのに気を使って,sleepを入れたり,キャッシュしたり,ということが,よくあると思います.
これまでに何度も外部のリソースをキャッシュする仕組みを作っているような気がしたので,外のリソースに気を使いつつopenしてくれるopenを作りました.


以下のような仕様です.

  • cached-openをrequireするとopenが上書きされる
  • openした結果をローカルのMemcachedに格納し,キャッシュがあればそこから返す
  • キャッシュがないとき,openできるのは5秒に1回(前にopenしてから5秒経つまでsleepする)


スクリプトをちょっとずつ実行しながら作っていくときや,たくさんリクエストを送るとbot扱いされるサイトにアクセスしまくるときに使えると思います.
前者の場合,たいてい同じページに何度もアクセスするので,キャッシュから結果を早く得られますし,後者の場合は,スクリプト側で気を使ってsleepする手間が省けます.

追記

適当に作りすぎたため,いろいろおかしいようです.