いろいろ備忘録日記

主に .NET とか Go とか Flutter とか Python絡みのメモを公開しています。

Goメモ-379 (otter, ハイパフォーマンスなキャッシュライブラリ)

関連記事

GitHub - devlights/blog-summary: ブログ「いろいろ備忘録日記」のまとめ

概要

以下、自分用のメモです。忘れないうちにメモメモ。。。

otterというキャッシュライブラリがあるのを知りました。

github.com

maypok86.github.io

まずアイコンが可愛らしい。アイコンが素敵なライブラリは大抵良いという個人的な感覚がありますw

シンプルに使えて、ハイパフォーマンスなのが売りみたいですね。

ちょこっとだけ試してみました。

試してみた

インストール

$ go get -u github.com/maypok86/otter@latest
module app

go 1.22.0

require github.com/maypok86/otter v1.0.0

require (
    github.com/dolthub/maphash v0.1.0 // indirect
    github.com/dolthub/swiss v0.2.1 // indirect
    github.com/gammazero/deque v0.2.1 // indirect
)
package main

import (
    "log"
    "time"

    "github.com/maypok86/otter"
)

const (
    KEY      = "KEY1"
    CAPACITY = 100
)

var (
    cache otter.Cache[string, string]
)

func init() {
    log.SetFlags(log.Ltime)
}

func main() {
    var err error

    //
    // Build
    //
    cache, err =
        otter.
            MustBuilder[string, string](CAPACITY).
            WithTTL(1 * time.Second).
            Build()

    if err != nil {
        panic(err)
    }
    defer cache.Close()

    //
    // Set
    //
    cache.Set(KEY, "hello world")

    //
    // Get
    //
    var (
        v  string
        ok bool
    )

    v, ok = cache.Get(KEY)
    if !ok {
        panic("not found")
    }
    log.Println(v)

    time.Sleep(3 * time.Second)

    _, ok = cache.Get(KEY)
    if !ok {
        log.Println("expired")
    }
}
$ task run
task: Task "build" is up to date
task: [run] ./app
08:31:56 hello world
08:31:59 expired

参考情報

🤓 My top 3 Go packages that I wish I'd known about earlier - DEV Community

Goのおすすめ書籍

上の書籍の日本語版が下です。


過去の記事については、以下のページからご参照下さい。

サンプルコードは、以下の場所で公開しています。