メインコンテンツまでスキップ

GoでMomentoキャッシュを始める

GoとMomento Cacheをすぐに使い始める必要がある場合、このページには必要な基本的なAPIコールが含まれています。Go SDK のサンプル を参照してください。

Momento SDKをインストールする

Goプロジェクトを作成したら、Momento Go SDKをインストールします。

go get github.com/momentohq/client-sdk-go

APIキーの設定

Momentoで認証するにはMomento API keyが必要です。 Momento Web Console](https://console.gomomento.com/caches)から取得できます。 トークンを取得したら、Momento クライアントが利用できるように環境変数に保存します:

export MOMENTO_AUTH_TOKEN=<your Momento token here>

Note: セキュリティ強化のためには、トークンを環境変数ではなく、AWS Secret ManagerやGCP Secret Managerのようなものに格納するのがベストプラクティスだが、ここではデモのために使用しています。

ライブラリをインポートし、CacheClient オブジェクトを作成します。

まず、必要なインポートを取り込み、メイン機能を設定する。

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
備考

その他のコード例については、Momento Go SDK repoをチェックしてください。

これらの基本的なAPIコール以外にも、MomentoのAPIコールの詳細については、APIリファレンスページをチェックしてください。