Momento Cache を Go で使うためのチートシート
このページでは、Momento Cache を Go で素早く使ってみたい方のために必要となる基礎的な API 呼出しを解説しています。このコードのファイル全体はGo SDK のページをご確認下さい。
Momento クライアントライブラリをインストールします
Goのプロジェクトを作成したら、Momento Go SDKをインストールします。
go get github.com/momentohq/client-sdk-go
authトークンをセットアップします
Momento で認証するには、Momento API keys が必要です。 Momento Webコンソール から取得できます。 トークンを取得したら、Momento クライアントが利用できるように環境変数に保存します:
export MOMENTO_API_KEY=<your key here>
Note: セキュリティ強化のためには、トークンを環境変数ではなく、AWS Secret ManagerやGCP Secret Managerのようなものに格納するのがベストプラクティスですが、ここではデモのために環境変数に保存しています。
ライブラリをインポートし、CacheClient オブジェクトを作成します
まず、必要なインポートを取り込み、main関数に設定します。
package main
import (
"context"
"errors"
"log"
"time"
"github.com/google/uuid"
"github.com/momentohq/client-sdk-go/auth"
"github.com/momentohq/client-sdk-go/config"
"github.com/momentohq/client-sdk-go/config/logger"
"github.com/momentohq/client-sdk-go/momento"
"github.com/momentohq/client-sdk-go/responses"
)
func main() {
fmt.Println("Hello, world.")
}
次に、Momento Cache とのやりとりに使用する CacheClient オブジェクトをインスタンス化します。
context := context.Background()
credentialProvider, err := auth.NewEnvMomentoTokenProvider("MOMENTO_API_KEY")
if err != nil {
panic(err)
}
defaultTtl := time.Duration(9999)
eagerConnectTimeout := 30 * time.Second
client, err := momento.NewCacheClientWithEagerConnectTimeout(
config.LaptopLatest(),
credentialProvider,
defaultTtl,
eagerConnectTimeout,
)
if err != nil {
panic(err)
}
client.Ping(context)
Momento Cacheで新しいキャッシュを作成します
この機能を使用して、アカウントに新しいキャッシュを作成します。
_, err := client.CreateCache(ctx, &momento.CreateCacheRequest{
CacheName: "cache-name",
})
if err != nil {
panic(err)
}
アカウントに存在するキャッシュの名前をリストアップする
アカウントに存在するキャッシュ名のリストが取得できます。
resp, err := client.ListCaches(ctx, &momento.ListCachesRequest{})
if err != nil {
panic(err)
}
switch r := resp.(type) {
case *responses.ListCachesSuccess:
log.Printf("Found caches %+v", r.Caches())
}
アイテムをキャッシュに書き込む
セット操作の簡単な例です。 client.set呼び出しでは、TTLはオプションです。 TTLを渡すと、クライアント接続オブジェクトで設定されたデフォルトのTTL値が上書きされます。
key := uuid.NewString()
value := uuid.NewString()
log.Printf("Setting key: %s, value: %s\n", key, value)
_, err := client.Set(ctx, &momento.SetRequest{
CacheName: "cache-name",
Key: momento.String(key),
Value: momento.String(value),
Ttl: time.Duration(9999),
})
if err != nil {
var momentoErr momento.MomentoError
if errors.As(err, &momentoErr) {
if momentoErr.Code() != momento.TimeoutError {
// this would represent a client-side timeout, and you could fall back to your original data source
} else {
panic(err)
}
}
}
キャッシュからアイテムを読み込む
これは、キャッシュから項目を取得する単純な読み取り操作の例です。
key := uuid.NewString()
resp, err := client.Get(ctx, &momento.GetRequest{
CacheName: "cache-name",
Key: momento.String(key),
})
if err != nil {
panic(err)
}
switch r := resp.(type) {
case *responses.GetHit:
log.Printf("Lookup resulted in cache HIT. value=%s\n", r.ValueString())
case *responses.GetMiss:
log.Printf("Look up did not find a value key=%s", key)
}
コードを実行する
コードを実行するには、go run
コマンドを使用します。
go run main.go
これらの API 呼出し以上のものは、API リファレンスページで Momento API 呼出しの全種類の詳しい情報をご確認下さい。
さらなるコード例は、Momento Go SDK レポジトリをご確認下さい。