Momento Cache Control APIs

2023/09/20に公開

API reference for Momento Cache (Control APIs)

API reference for Momento Cacheに掲載されている
Control APIsに関するメモです。

Momento CacheのAPIには種類がある

Momento CacheのAPIには主に3種類のAPIが存在します。

  • Control
  • Data
  • Time to Live

他にも認証用のAPIや特定のデータ型を操作するAPIがあります。
今回は基本となるControl APIsについて解説します。

Control APIsでは何ができるのか

Control APIsではキャッシュの操作ができます。キャッシュに対する操作には4つのメソッドがあります。

メソッド 操作内容
Create Momento Cache上にキャッシュを作成する
Delete Momento Cache上のキャッシュを削除する
List Momento Cache上のキャッシュ一覧を表示する
Flush Momento Cache上にキャッシュされたデータを削除する(初期化するに等しい)

事前に準備するもの

  • MomentoのMOMENTO_API_KEY
  • 各言語のパッケージにおけるMomentoのSDK
    • 今回はNode.jsを利用、Momento Web SDKは使いません

Create cache

Momento Cache上にキャッシュを作成します。

import { CacheClient, CreateCache, ListCaches, Configurations, CredentialProvider } from '@gomomento/sdk';

async function momento_create_cache(cache_name, cache_client) {
  const result = await cache_client.createCache(cache_name);
  if (result instanceof CreateCache.Success) {
    console.log("Cache 'test-cache' created");
  } else if (result instanceof CreateCache.AlreadyExists) {
    console.log("Cache 'test-cache' already exists");
  } else if (result instanceof CreateCache.Error) {
    throw new Error(
      `An error occurred while attempting to create cache 'test-cache': ${result.errorCode()}: ${result.toString()}`
    );
  }
}

async function momento_list_caches(cache_client) {
  const result = await cache_client.listCaches();
  if (result instanceof ListCaches.Success) {
    console.log(
      `Caches:\n${result
        .getCaches()
        .map(c => c.getName())
        .join('\n')}\n\n`
    );
  } else if (result instanceof ListCaches.Error) {
    throw new Error(`An error occurred while attempting to list caches: ${result.errorCode()}: ${result.toString()}`);
  }
}

export default function main() {

  const cache_name = 'test-cache';
  const cache_client = new CacheClient({
    configuration: Configurations.Laptop.v1(),
    defaultTtlSeconds: 60,
    credentialProvider: CredentialProvider.fromEnvironmentVariable({
      environmentVariableName: 'MOMENTO_API_KEY',
    }),
  });

  momento_create_cache(cache_name, cache_client);
  momento_list_caches(cache_client);
}

main();

Create cacheメソッドは存在するかしないか、エラーかの3つに結果が分かれます。

Delete cache

Momento Cache上のキャッシュを削除します。

import { CacheClient, CreateCache, ListCaches, DeleteCache, Configurations, CredentialProvider } from '@gomomento/sdk';

async function momento_create_cache(cache_name, cache_client) {
  const result = await cache_client.createCache(cache_name);
  if (result instanceof CreateCache.Success) {
    console.log("Cache 'test-cache' created");
  } else if (result instanceof CreateCache.AlreadyExists) {
    console.log("Cache 'test-cache' already exists");
  } else if (result instanceof CreateCache.Error) {
    throw new Error(
      `An error occurred while attempting to create cache 'test-cache': ${result.errorCode()}: ${result.toString()}`
    );
  }
}

async function momento_list_caches(cache_client) {
  const result = await cache_client.listCaches();
  if (result instanceof ListCaches.Success) {
    console.log(
      `Caches:\n${result
        .getCaches()
        .map(c => c.getName())
        .join('\n')}\n\n`
    );
  } else if (result instanceof ListCaches.Error) {
    throw new Error(`An error occurred while attempting to list caches: ${result.errorCode()}: ${result.toString()}`);
  }
}

async function momento_delete_cache(cache_name, cache_client) {
  const result = await cache_client.deleteCache(cache_name);
  if (result instanceof DeleteCache.Success) {
    console.log("Cache" + cache_name + " deleted");
  } else if (result instanceof DeleteCache.Error) {
    throw new Error(
      `An error occurred while attempting to delete cache : ${result.errorCode()}: ${result.toString()}`
    );
  }
}

export default function main() {

  const cache_name = 'test-cache';
  const cache_client = new CacheClient({
    configuration: Configurations.Laptop.v1(),
    defaultTtlSeconds: 60,
    credentialProvider: CredentialProvider.fromEnvironmentVariable({
      environmentVariableName: 'MOMENTO_API_KEY',
    }),
  });

  momento_create_cache(cache_name, cache_client);
  momento_list_caches(cache_client);
  momento_delete_cache(cache_name, cache_client);
  momento_list_caches(cache_client);

}

main();

Delete cacheメソッドはキャッシュが存在する場合は削除し、存在しない場合はエラーが発生します。

List caches

Momento Cache上のキャッシュ一覧を表示します。

import { CacheClient, CreateCache, ListCaches, Configurations, CredentialProvider } from '@gomomento/sdk';

async function momento_create_cache(cache_name, cache_client) {
  const result = await cache_client.createCache(cache_name);
  if (result instanceof CreateCache.Success) {
    console.log("Cache 'test-cache' created");
  } else if (result instanceof CreateCache.AlreadyExists) {
    console.log("Cache 'test-cache' already exists");
  } else if (result instanceof CreateCache.Error) {
    throw new Error(
      `An error occurred while attempting to create cache 'test-cache': ${result.errorCode()}: ${result.toString()}`
    );
  }
}

async function momento_list_caches(cache_client) {
  const result = await cache_client.listCaches();
  if (result instanceof ListCaches.Success) {
    console.log(
      `Caches:\n${result
        .getCaches()
        .map(c => c.getName())
        .join('\n')}\n\n`
    );
  } else if (result instanceof ListCaches.Error) {
    throw new Error(`An error occurred while attempting to list caches: ${result.errorCode()}: ${result.toString()}`);
  }
}

export default function main() {

  const cache_name = 'test-cache';
  const cache_client = new CacheClient({
    configuration: Configurations.Laptop.v1(),
    defaultTtlSeconds: 60,
    credentialProvider: CredentialProvider.fromEnvironmentVariable({
      environmentVariableName: 'MOMENTO_API_KEY',
    }),
  });

  momento_create_cache(cache_name, cache_client);
  momento_list_caches(cache_client);
}

main();

List cacheメソッドはキャッシュが存在する場合はリストを取得し、存在しない場合はエラーが発生します。

Flush cache

Momento Cache上のキャッシュされたデータを削除します。初期化のイメージに近い処理です。

import { CacheClient, CreateCache, CacheFlush, Configurations, CredentialProvider } from '@gomomento/sdk';

async function momento_create_cache(cache_name, cache_client) {
  const result = await cache_client.createCache(cache_name);
  if (result instanceof CreateCache.Success) {
    console.log("Cache 'test-cache' created");
  } else if (result instanceof CreateCache.AlreadyExists) {
    console.log("Cache 'test-cache' already exists");
  } else if (result instanceof CreateCache.Error) {
    throw new Error(
      `An error occurred while attempting to create cache 'test-cache': ${result.errorCode()}: ${result.toString()}`
    );
  }
}

async function momento_flush_cache(cache_name, cache_client) {
  const result = await cache_client.flushCache(cache_name);
  if (result instanceof CacheFlush.Success) {
    console.log("Cache 'test-cache' flushed");
  } else if (result instanceof CacheFlush.Error) {
    throw new Error(
      `An error occurred while attempting to flush cache 'test-cache': ${result.errorCode()}: ${result.toString()}`
    );
  }
}

export default function main() {

  const cache_name = 'test-cache';
  const cache_client = new CacheClient({
    configuration: Configurations.Laptop.v1(),
    defaultTtlSeconds: 60,
    credentialProvider: CredentialProvider.fromEnvironmentVariable({
      environmentVariableName: 'MOMENTO_API_KEY',
    }),
  });

  momento_create_cache(cache_name, cache_client);
  momento_flush_cache(cache_name, cache_client);
}

main();

おわり

Discussion