LoginSignup
0
0

More than 1 year has passed since last update.

gcacheとは(golang)

Posted at

gcache とは

gcacheはgolangのキャッシュライブラリです。
データを一時的にキャッシュし、特定のキャッシュ削除を行う場合に便利なライブラリとなっています。

  • 特徴
    • 様々な有効期限付きのキャッシュを作成できる
      • LFU、LRU、ARC
    • スレッド(goroutine)セーフ
    • エントリーを削除、削除、および追加するイベントハンドラーをサポートしている
    • キャッシュが存在しない場合、キャッシュを自動的に読み込んでくれる

使い方

インストールするためには、go getコマンドを実行します。

$ go get -u https://github.com/bluele/gcache

一番簡単な例はこのようになります。

main.go
package main

import (
 "github.com/bluele/gcache"
 "fmt"
)

func main() {
 gc := gcache.New(20).
  LRU().
  Build()
 gc.Set("key", "ok")
 value, err := gc.Get("key")
 if err != nil {
  panic(err)
 }
 fmt.Println("Get:", value)
}

実行すると、次のようにコンソールに出力されます。

Get: ok

消去時間の設定もSetWithExpire()を使用することで簡単にできます。

main.go
package main

import (
 "github.com/bluele/gcache"
 "fmt"
 "time"
)

func main() {
 gc := gcache.New(20).
  LRU().
  Build()
 // 消去時間の設定
 gc.SetWithExpire("key", "ok", time.Second*10)
 value, _ := gc.Get("key")
 fmt.Println("Get:", value)

 // Wait for value to expire
 time.Sleep(time.Second*10)

 value, err := gc.Get("key")
 if err != nil {
  panic(err)
 }
 fmt.Println("Get:", value)
}

実行すると、次のようにコンソールに出力されます。
最初は取得に成功していましたが、時間が経つとキャッシュが削除され取得できなくなります。

Get: ok
panic: Key not found.

goroutine 1 [running]:
~~~
exit status 2

有効期限付きのキャッシュの設定は、以下のように容易に変更できます。

main.go
func main() {
    // size: 10
    gc := gcache.New(10).
    // ここでLFU、LRU、ARCを設定できる
      LFU().
      Build()
    gc.Set("key", "value")
  }

ハンドラの追加はAddedFunc()を使用して実装します。
(削除はEvictedFunc()を使用する)

main.go
func main() {
  gc := gcache.New(2).
    AddedFunc(func(key, value interface{}) {
      fmt.Println("added key:", key)
    }).
    Build()
  for i := 0; i < 3; i++ {
    gc.Set(i, i*i)
  }
}

実行結果

added key: 0
added key: 1
added key: 2

シンプルで使いやすいキャッシュライブラリですね。

参考

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0