Momento Cache 4つのコレクションデータ その3 Sets
今日は前回、前々回の記事に引き続いて3つめのコレクションデータ側であるSetsをやっていきます。過去の記事はこちらです。
Setsとは
Setsとは要素の集まりですが、各要素は一度しか現れず、順序は保証されていません。既にある要素を追加で書き込んでも、同じ要素が複数保持されることはありません。
さっそくやってみる
では早速やってみます。アイテムの作成と要素の書き込みはSetAddElement
を用います。
// Declare the Momento SDK library
const {
Configurations,
CacheClient, CredentialProvider,
CacheSetAddElement,
} = require('@gomomento/sdk');
// Declate the dotenv library
const dotenv = require('dotenv');
// Run the config function to bring in the .env file
dotenv.config();
// Creates the Momento cache client object
async function createCacheClient() {
return await CacheClient.create({
configuration: Configurations.Laptop.v1(),
credentialProvider: CredentialProvider.fromEnvironmentVariable({
environmentVariableName: 'MOMENTO_API_KEY',
}),
defaultTtlSeconds: 600,
});
}
// A simple function that calls all functions in order. You probably want more error handling.
async function run() {
const cacheClient = await createCacheClient();
const result = await cacheClient.setAddElement('demo-cache', 'test-set', 'test-element');
if (result instanceof CacheSetAddElement.Success) {
console.log("Element added successfully to set 'test-set'");
} else if (result instanceof CacheSetAddElement.Error) {
throw new Error(
`An error occurred while attempting to call cacheSetAddElement on set 'test-set' in cache 'test-cache': ${result.errorCode()}: ${result.toString()}`
);
}
}
run();
const result = await cacheClient.setAddElement('demo-cache', 'test-set', 'test-element');
demo-cache
というキャッシュにtest-set
というキー名でtest-element
という値を書き込みます。
Sets
は複数要素を持てますので、SetAddElements
を用いることで複数要素を一度に書き込むことが出来ます。
// Declare the Momento SDK library
const {
Configurations,
CacheClient, CredentialProvider,
CacheSetAddElement,CacheSetAddElements
} = require('@gomomento/sdk');
// Declate the dotenv library
const dotenv = require('dotenv');
// Run the config function to bring in the .env file
dotenv.config();
// Creates the Momento cache client object
async function createCacheClient() {
return await CacheClient.create({
configuration: Configurations.Laptop.v1(),
credentialProvider: CredentialProvider.fromEnvironmentVariable({
environmentVariableName: 'MOMENTO_API_KEY',
}),
defaultTtlSeconds: 600,
});
}
// A simple function that calls all functions in order. You probably want more error handling.
async function run() {
const cacheClient = await createCacheClient();
const result = await cacheClient.setAddElements('demo-cache', 'test-set', ['test-element','test-element1', 'test-element2']);
if (result instanceof CacheSetAddElements.Success) {
console.log("Elements added successfully to set 'test-set'");
} else if (result instanceof CacheSetAddElements.Error) {
throw new Error(
`An error occurred while attempting to call cacheSetAddElements on set 'test-set' in cache 'test-cache': ${result.errorCode()}: ${result.toString()}`
);
}
}
run();
const result = await cacheClient.setAddElements('demo-cache', 'test-set', ['test-element','test-element1', 'test-element2']);
demo-cache
というキャッシュにtest-set
というキー名でtest-element
、test-element1
、test-element2
という値を書き込みます。
先ほどのサンプルで既にtest-element
が書き込まれていますので、新たに追加されることはなく、test-element1
、test-element2
だけが追加されます。
同様に順不同なDictionaryは、タイミングで複数要素が表示される順番はことなりましたが、Setsの場合何度呼び出しを行っても同じ順番で出力されるようです。ただし、仕様上は順番を保証していないので気を付ける必要があります。
呼び出しはSetFetch
で行います。
// Declare the Momento SDK library
const {
Configurations,
CacheClient, CredentialProvider,
CacheSetAddElement, CacheSetAddElements,
CacheSetFetch
} = require('@gomomento/sdk');
// Declate the dotenv library
const dotenv = require('dotenv');
// Run the config function to bring in the .env file
dotenv.config();
// Creates the Momento cache client object
async function createCacheClient() {
return await CacheClient.create({
configuration: Configurations.Laptop.v1(),
credentialProvider: CredentialProvider.fromEnvironmentVariable({
environmentVariableName: 'MOMENTO_API_KEY',
}),
defaultTtlSeconds: 600,
});
}
// A simple function that calls all functions in order. You probably want more error handling.
async function run() {
const cacheClient = await createCacheClient();
await cacheClient.setAddElements('demo-cache', 'test-set', ['test-element', 'test-element1', 'test-element2']);
const result = await cacheClient.setFetch('demo-cache', 'test-set');
if (result instanceof CacheSetFetch.Hit) {
console.log('Set fetched successfully- ');
result.valueSet().forEach((value, key) => {
console.log(`${key} : ${value}`);
});
} else if (result instanceof CacheSetFetch.Miss) {
console.log("Set 'test-set' was not found in cache 'test-cache'");
} else if (result instanceof CacheSetFetch.Error) {
throw new Error(
`An error occurred while attempting to call cacheSetFetch on set 'test-set' in cache 'test-cache': ${result.errorCode()}: ${result.toString()}`
);
}
}
run();
const result = await cacheClient.setFetch('demo-cache', 'test-set');
Set fetched successfully-
test-element2 : test-element2
test-element1 : test-element1
test-element : test-element
削除を行うのはSetRemoveElement
です。複数要素を持つ場合、特定の要素のみを削除できます。
// Declare the Momento SDK library
const {
Configurations,
CacheClient, CredentialProvider,
CacheSetAddElement, CacheSetAddElements,
CacheSetFetch,
CacheSetRemoveElement,
} = require('@gomomento/sdk');
// Declate the dotenv library
const dotenv = require('dotenv');
// Run the config function to bring in the .env file
dotenv.config();
// Creates the Momento cache client object
async function createCacheClient() {
return await CacheClient.create({
configuration: Configurations.Laptop.v1(),
credentialProvider: CredentialProvider.fromEnvironmentVariable({
environmentVariableName: 'MOMENTO_API_KEY',
}),
defaultTtlSeconds: 600,
});
}
// A simple function that calls all functions in order. You probably want more error handling.
async function run() {
const cacheClient = await createCacheClient();
await cacheClient.setAddElements('demo-cache', 'test-set', ['test-element', 'test-element1', 'test-element2']);
const result = await cacheClient.setRemoveElement('demo-cache', 'test-set', 'test-element');
if (result instanceof CacheSetRemoveElement.Success) {
console.log("Element 'test-element' removed successfully from set 'test-set'");
} else if (result instanceof CacheSetRemoveElement.Error) {
throw new Error(
`An error occurred while attempting to call cacheSetRemoveElement on set 'test-set' in cache 'test-cache': ${result.errorCode()}: ${result.toString()}`
);
}
}
run();
const result = await cacheClient.setRemoveElement('demo-cache', 'test-set', 'test-element');
前回同様削除は通常のキャッシュアイテムとしてtest-set
をキーとして削除できます。
またある要素がSetsアイテムの中に含まれているかどうかを判別するる関数としてSetContainsElement
やSetContainsElements
が定義されていますが、JavsScriptSDKにはまだデプロイされていない様です。
こちらは使えるようになり次第記事を更新する予定です。
Discussion