Momento Cache Time to Live APIs
API reference for Momento Cache (Time to Live APIs)
API reference for Momento Cacheに掲載されている
Time to Live APIsに関するメモです。
Momento CacheのAPIには種類がある
Momento CacheのAPIには主に3種類のAPIが存在します。
- Control
- Data
- Time to Live
他にも認証用のAPIや特定のデータ型を操作するAPIがあります。
今回は基本となるTime to Live APIsについて解説します。
おさらい:Time to Live(TTL)とは
主にインフラの分野において使われるIT用語、よく生存期間と直訳されますが
データの有効期間という意味合いで使われます。
たとえば、TTLが60秒のデータが存在する場合は60秒間そのデータを使えるようにするという意味があります。
ネットワークの分野ではパケットデータの有効期間としてTTLが存在します。
MomentoにおけるTTL
結論を言うと同じ意味です。Momentoにおいても同じ意味で扱われます。
Momentoではキャッシュ単位ではなく、キャッシュに格納されたデータに対してTTLを設定できます。
Momento Cache APIではData APIsでTTLの設定ができます。
ただし、Data APIsでTTLを設定する際はキャッシュにデータをセットする時(Set API
)とキーと値を関連づける時(SetIfNotExists
)のみです。
TTLを操作する場合はTime to Live APIsを利用します。
Time to Live APIsでは何ができるのか
主にMomento上にあるキャッシュデータを操作できます。すでに作成されているキャッシュに対して有効です。
メソッド | 操作内容 |
---|---|
UpdateTtl | Momento Cache上にキャッシュされたデータのTTLを更新する |
IncreaseTtl | Momento Cache上にキャッシュされたデータのTTLを指定された数値だけ加算します |
DecreaseTtl | Momento Cache上にキャッシュされたデータのTTLを指定された数値だけ減算します |
ItemGetTtl | Momento Cache上にキャッシュされたデータのTTLを取得します |
UpdateTtl
キャッシュされたデータのTTLを秒単位で指定した値に上書きします。
以下にサンプルコードを示します。
import { CacheClient, CredentialProvider, Configurations, CreateCache, CacheSet, CacheUpdateTtl } from '@gomomento/sdk';
async function momento_create_cache(cache_client, cache_name) {
const result = await cache_client.createCache(cache_name);
if (result instanceof CreateCache.Success) {
console.log(`Cache ${cache_name} created`);
} else if (result instanceof CreateCache.AlreadyExists) {
console.log(`Cache ${cache_name} already exists`);
} else if (result instanceof CreateCache.Error) {
throw new Error(
`An error occurred while attempting to create cache ${cache_name}: ${result.errorCode()}: ${result.toString()}`
);
}
}
async function momento_set_data(cache_client, cache_name, key_name, key_value) {
const result = await cache_client.set(cache_name, key_name, key_value);
if (result instanceof CacheSet.Success) {
console.log(`Key ${key_name} stored successfully`);
} else if (result instanceof CacheSet.Error) {
throw new Error(
`An error occurred while attempting to store key 'test-key' in cache cache_name: ${result.errorCode()}: ${result.toString()}`
);
}
}
async function momento_update_ttl(cache_client, cacheName, cacheKey, second) {
const result = await cache_client.updateTtl(cacheName, cacheKey, 1000 * second);
if (result instanceof CacheUpdateTtl.Set) {
console.log(`${cacheKey} update ttl ${second}s`);
} else if (result instanceof CacheUpdateTtl.Miss) {
console.log(`${cacheKey} cache Miss`);
}
}
export default function main() {
const cache_client = new CacheClient({
configuration: Configurations.Laptop.v1(),
defaultTtlSeconds: 60,
credentialProvider: CredentialProvider.fromEnvironmentVariable({
environmentVariableName: 'MOMENTO_API_KEY'
})
});
const cacheName = 'test_ttl_cache';
const cacheKey = 'sample';
momento_create_cache(cache_client, cacheName, cacheKey);
momento_set_data(cache_client, cacheName, cacheKey, 'data');
momento_update_ttl(cache_client, cacheName, cacheKey, 120);
}
main();
IncreaseTtl
指定された数値でTTLの値を加算します。
以下にサンプルコードを示します。
import { CacheClient, CredentialProvider, Configurations, CreateCache, CacheSet, CacheUpdateTtl, CacheIncreaseTtl } from '@gomomento/sdk';
async function momento_create_cache(cache_client, cache_name) {
const result = await cache_client.createCache(cache_name);
if (result instanceof CreateCache.Success) {
console.log(`Cache ${cache_name} created`);
} else if (result instanceof CreateCache.AlreadyExists) {
console.log(`Cache ${cache_name} already exists`);
} else if (result instanceof CreateCache.Error) {
throw new Error(
`An error occurred while attempting to create cache ${cache_name}: ${result.errorCode()}: ${result.toString()}`
);
}
}
async function momento_set_data(cache_client, cache_name, key_name, key_value) {
const result = await cache_client.set(cache_name, key_name, key_value);
if (result instanceof CacheSet.Success) {
console.log(`Key ${key_name} stored successfully`);
} else if (result instanceof CacheSet.Error) {
throw new Error(
`An error occurred while attempting to store key 'test-key' in cache cache_name: ${result.errorCode()}: ${result.toString()}`
);
}
}
async function momento_update_ttl(cache_client, cacheName, cacheKey, second) {
const result = await cache_client.updateTtl(cacheName, cacheKey, 1000 * second);
if (result instanceof CacheUpdateTtl.Set) {
console.log(`${cacheKey} update ttl ${second}s`);
} else if (result instanceof CacheUpdateTtl.Miss) {
console.log(`${cacheKey} cache Miss`);
}
}
async function momento_increase_ttl(cache_client, cacheName, cacheKey, duration) {
const result = await cache_client.increaseTtl(cacheName, cacheKey, 1000 * duration);
if (result instanceof CacheIncreaseTtl.Set) {
console.log(`${cacheKey} increase ttl ${duration}s`);
} else if (result instanceof CacheIncreaseTtl.Miss) {
console.log(`${cacheKey} cache Miss`);
} else if (result instanceof CacheIncreaseTtl.Error) {
console.log(`increase error ${result.errorCode()}`);
}
}
export default function main() {
const cache_client = new CacheClient({
configuration: Configurations.Laptop.v1(),
defaultTtlSeconds: 60,
credentialProvider: CredentialProvider.fromEnvironmentVariable({
environmentVariableName: 'MOMENTO_API_KEY'
})
});
const cacheName = 'test_ttl_cache';
const cacheKey = 'sample';
momento_create_cache(cache_client, cacheName, cacheKey);
momento_set_data(cache_client, cacheName, cacheKey, 'data');
momento_update_ttl(cache_client, cacheName, cacheKey, 70);
momento_increase_ttl(cache_client, cacheName, cacheKey, 150);
}
main();
DecreaseTtl
指定された数値でTTLの値を減算します。
import { CacheClient, CredentialProvider, Configurations, CreateCache, CacheSet, CacheUpdateTtl, CacheIncreaseTtl, CacheDecreaseTtl } from '@gomomento/sdk';
async function momento_create_cache(cache_client, cache_name) {
const result = await cache_client.createCache(cache_name);
if (result instanceof CreateCache.Success) {
console.log(`Cache ${cache_name} created`);
} else if (result instanceof CreateCache.AlreadyExists) {
console.log(`Cache ${cache_name} already exists`);
} else if (result instanceof CreateCache.Error) {
throw new Error(
`An error occurred while attempting to create cache ${cache_name}: ${result.errorCode()}: ${result.toString()}`
);
}
}
async function momento_set_data(cache_client, cache_name, key_name, key_value) {
const result = await cache_client.set(cache_name, key_name, key_value);
if (result instanceof CacheSet.Success) {
console.log(`Key ${key_name} stored successfully`);
} else if (result instanceof CacheSet.Error) {
throw new Error(
`An error occurred while attempting to store key 'test-key' in cache cache_name: ${result.errorCode()}: ${result.toString()}`
);
}
}
async function momento_update_ttl(cache_client, cacheName, cacheKey, second) {
const result = await cache_client.updateTtl(cacheName, cacheKey, 1000 * second);
if (result instanceof CacheUpdateTtl.Set) {
console.log(`${cacheKey} update ttl ${second}s`);
} else if (result instanceof CacheUpdateTtl.Miss) {
console.log(`${cacheKey} cache Miss`);
}
}
async function momento_increase_ttl(cache_client, cacheName, cacheKey, duration) {
const result = await cache_client.increaseTtl(cacheName, cacheKey, 1000 * duration);
if (result instanceof CacheIncreaseTtl.Set) {
console.log(`${cacheKey} increase ttl ${duration}s`);
} else if (result instanceof CacheIncreaseTtl.Miss) {
console.log(`${cacheKey} cache Miss`);
} else if (result instanceof CacheIncreaseTtl.Error) {
console.log(`increase error ${result.errorCode()}`);
}
}
async function momento_decrease_ttl(cache_client, cacheName, cacheKey, duration) {
const result = await cache_client.decreaseTtl(cacheName, cacheKey, 1000 * duration);
if (result instanceof CacheDecreaseTtl.Set) {
console.log(`${cacheKey} decrease ttl ${duration}s`);
} else if (result instanceof CacheDecreaseTtl.Miss) {
console.log(`${cacheKey} cache Miss`);
} else if (result instanceof CacheDecreaseTtl.Error) {
console.log(`increase error ${result.errorCode()}`);
}
}
export default function main() {
const cache_client = new CacheClient({
configuration: Configurations.Laptop.v1(),
defaultTtlSeconds: 60,
credentialProvider: CredentialProvider.fromEnvironmentVariable({
environmentVariableName: 'MOMENTO_API_KEY'
})
});
const cacheName = 'test_ttl_cache';
const cacheKey = 'sample';
momento_create_cache(cache_client, cacheName, cacheKey);
momento_set_data(cache_client, cacheName, cacheKey, 'data');
momento_update_ttl(cache_client, cacheName, cacheKey, 70);
momento_increase_ttl(cache_client, cacheName, cacheKey, 150);
momento_decrease_ttl(cache_client, cacheName, cacheKey, 60);
}
main();
ItemGetTtl
指定されたキャッシュおよびキーの名前でTTLの値を取得します。
import { CacheClient, CredentialProvider, Configurations, CreateCache, CacheSet, CacheUpdateTtl, CacheIncreaseTtl, CacheDecreaseTtl, CacheItemGetTtl } from '@gomomento/sdk';
async function momento_create_cache(cache_client, cache_name) {
const result = await cache_client.createCache(cache_name);
if (result instanceof CreateCache.Success) {
console.log(`Cache ${cache_name} created`);
} else if (result instanceof CreateCache.AlreadyExists) {
console.log(`Cache ${cache_name} already exists`);
} else if (result instanceof CreateCache.Error) {
throw new Error(
`An error occurred while attempting to create cache ${cache_name}: ${result.errorCode()}: ${result.toString()}`
);
}
}
async function momento_set_data(cache_client, cache_name, key_name, key_value) {
const result = await cache_client.set(cache_name, key_name, key_value);
if (result instanceof CacheSet.Success) {
console.log(`Key ${key_name} stored successfully`);
} else if (result instanceof CacheSet.Error) {
throw new Error(
`An error occurred while attempting to store key ${key_name} in cache cache_name: ${result.errorCode()}: ${result.toString()}`
);
}
}
async function momento_update_ttl(cache_client, cacheName, cacheKey, second) {
const result = await cache_client.updateTtl(cacheName, cacheKey, 1000 * second);
if (result instanceof CacheUpdateTtl.Set) {
console.log(`${cacheKey} update ttl ${second}s`);
} else if (result instanceof CacheUpdateTtl.Miss) {
console.log(`${cacheKey} cache Miss`);
}
}
async function momento_increase_ttl(cache_client, cacheName, cacheKey, duration) {
const result = await cache_client.increaseTtl(cacheName, cacheKey, 1000 * duration);
if (result instanceof CacheIncreaseTtl.Set) {
console.log(`${cacheKey} increase ttl ${duration}s`);
} else if (result instanceof CacheIncreaseTtl.Miss) {
console.log(`${cacheKey} cache Miss`);
} else if (result instanceof CacheIncreaseTtl.Error) {
console.log(`increase error ${result.errorCode()}`);
}
}
async function momento_decrease_ttl(cache_client, cacheName, cacheKey, duration) {
const result = await cache_client.decreaseTtl(cacheName, cacheKey, 1000 * duration);
if (result instanceof CacheDecreaseTtl.Set) {
console.log(`${cacheKey} decrease ttl ${duration}s`);
} else if (result instanceof CacheDecreaseTtl.Miss) {
console.log(`${cacheKey} cache Miss`);
} else if (result instanceof CacheDecreaseTtl.Error) {
console.log(`increase error ${result.errorCode()}`);
}
}
async function momento_item_get_ttl(cache_client, cacheName, cacheKey) {
const result = await cache_client.itemGetTtl(cacheName, cacheKey);
if (result instanceof CacheItemGetTtl.Hit) {
console.log(`ttl: ${result.remainingTtlMillis() / 1000}`);
} else if (result instanceof CacheItemGetTtl.Miss) {
console.log('none ttl');
} else if (result instanceof CacheItemGetTtl.Error) {
console.log('error');
}
}
export default function main() {
const cache_client = new CacheClient({
configuration: Configurations.Laptop.v1(),
defaultTtlSeconds: 60,
credentialProvider: CredentialProvider.fromEnvironmentVariable({
environmentVariableName: 'MOMENTO_API_KEY'
})
});
const cacheName = 'test_ttl_cache';
const cacheKey = 'sample';
momento_create_cache(cache_client, cacheName, cacheKey);
momento_set_data(cache_client, cacheName, cacheKey, 'data');
momento_update_ttl(cache_client, cacheName, cacheKey, 70);
momento_item_get_ttl(cache_client, cacheName, cacheKey);
momento_increase_ttl(cache_client, cacheName, cacheKey, 150);
momento_item_get_ttl(cache_client, cacheName, cacheKey);
momento_decrease_ttl(cache_client, cacheName, cacheKey, 60);
momento_item_get_ttl(cache_client, cacheName, cacheKey);
}
main();
Discussion