読者です 読者をやめる 読者になる 読者になる

パルカワ2

PerlとRubyとイチャラブ

キャッシュする時に指定した秒数経つとキャッシュが消えるgoのライブラリを作った。

追記


有益な情報を多数得た(ありがとうございます!)ので、以下の変更を加えてみた。

  • Get, Delete, GetOrSetで値以外にもboolを返すようにした。
    • Getは値を持っていたらtrue, 持ってなかったらfalse
    • Deleteは削除したらtrue, しなかったらfalse
    • GetOrSetは値を持っていたらtrue, 持っておらずSetしたらfalseを返すようにした
    • http://blog.golang.org/go-maps-in-action
  • delete(map, key)を使うようにした
  • RWMutexを使ってロックするようにしてみた。

https://github.com/hisaichi5518/vache
めっちゃ勉強になった。

追記終わり。

vache

Golang〜〜
指定した秒数経つとキャッシュが消えるというのをGoだけでやりたかったのでモジュールにした。
みんなだいすきPerlにはそういうモジュールがある。
https://metacpan.org/release/Cache-Scalar-WithExpiry

vacheという可愛い名前です。
https://github.com/hisaichi5518/vache

使い方

package main

import (
	"log"
	"time"

	"github.com/hisaichi5518/vache"
)

func main() {
	vache.Set("key", "val", time.Second) // 1秒後に消えると指定
	v, ok := vache.Get("key")
	log.Println(v)  //=> 2014/08/23 19:58:22 val
	log.Println(ok) //=> 2014/08/23 19:58:22 true

	time.Sleep(2 * time.Second) // キャッシュを消すため、2秒スリープ
	v, ok = vache.Get("key")
	if !ok {
		v = "not found" // 消えてたらnot foundになるようにする
	}
	log.Println(v)  //=> 2014/08/23 19:58:24 not found <= 消えてる!
	log.Println(ok) //=> 2014/08/23 19:58:24 false <= 消えてる!
}

実装について

time.AfterFuncを使えば、何秒後にほげほげするとか出来るので、それを使った。
http://golang.org/pkg/time/#AfterFunc

ツッコミお待ちしております。