Skip to main content

Dictionary API reference for Momento Cache

This page details the Momento API methods for the dictionary collection data type.

info

Momento collection types use a CollectionTTL to specify their TTL behavior. This is an optional argument for all "write" operations.

Dictionary methods

DictionaryFetch

Gets a dictionary item from a cache.

NameTypeDescription
cacheNameStringName of the cache.
dictionaryNameStringThe name of the dictionary item to be retrieved.
Method response object

The response object for DictionaryFetch returns three possible options, a cache hit, miss, or an error.

  • Cache hit
    • valueDictionaryBytesBytes(): Map<Bytes, Bytes>
    • valueDictionaryStringString(): Map<String, String>
    • valueDictionaryStringBytes(): Map<String, Bytes>
    • valueDictionaryBytesString(): Map<Bytes, String>
    • toString(): String - displays the field/value pairs, truncated.
  • Cache miss
  • Cache error

See response objects for specific information.

await cacheClient.dictionarySetField(cacheName, 'test-dictionary', 'test-field', 'test-value');
const result = await cacheClient.dictionaryFetch(cacheName, 'test-dictionary');

// simplified style; assume the value was found
console.log(`Dictionary fetched: ${result.value()!}`);

// pattern-matching style; safer for production code
switch (result.type) {
case CacheDictionaryFetchResponse.Hit:
console.log('Dictionary fetched successfully- ');
result.valueMap().forEach((value, key) => {
console.log(`${key} : ${value}`);
});
break;
case CacheDictionaryFetchResponse.Miss:
console.log(`Dictionary 'test-dictionary' was not found in cache '${cacheName}'`);
break;
case CacheDictionaryFetchResponse.Error:
throw new Error(
`An error occurred while attempting to call cacheDictionaryFetch on dictionary 'test-dictionary' in cache '${cacheName}': ${result.errorCode()}: ${result.toString()}`
);
}
info
Full example code and imports can be found here

DictionaryGetField

Get one field from a dictionary item in the cache.

NameTypeDescription
cacheNameStringName of the cache.
dictionaryNameStringName of the dictionary item to be retrieved.
fieldString/BytesName of the field in the dictionary item to be retrieved.
Method response object
  • Cache hit

    • fieldString(): String

    • fieldBytes(): Bytes

    • valueString(): String

    • valueBytes(): Bytes

      These return the field and its value from the dictionary.

  • Cache miss

    • fieldString(): String
    • fieldBytes(): Bytes
  • Cache error

    • fieldString(): String
    • fieldBytes(): Bytes

See response objects for specific information.

await cacheClient.dictionarySetField(cacheName, 'test-dictionary', 'test-field', 'test-value');
const result = await cacheClient.dictionaryGetField(cacheName, 'test-dictionary', 'test-field');

// simplified style; assume the value was found
console.log(`Field 'test-field' fetched from dictionary: ${result.value()!}`);

// pattern-matching style; safer for production code
switch (result.type) {
case CacheDictionaryGetFieldResponse.Hit:
console.log(
`Field ${result.fieldString()} fetched successfully from cache '${cacheName}' with value: ${result.value()}`
);
break;
case CacheDictionaryGetFieldResponse.Miss:
console.log(`Dictionary 'test-dictionary' was not found in cache '${cacheName}'`);
break;
case CacheDictionaryGetFieldResponse.Error:
throw new Error(
`An error occurred while attempting to call cacheDictionaryGetField on dictionary 'test-dictionary' in cache '${cacheName}': ${result.errorCode()}: ${result.toString()}`
);
}
info
Full example code and imports can be found here

DictionaryGetFields

Get one or more fields from a dictionary in the cache.

NameTypeDescription
cacheNameStringName of the cache.
dictionaryNameStringName of the dictionary item to be retrieved.
fieldsString[]/Bytes[]Name of the field in the dictionary item to be retrieved.
Method response object
  • Cache hit
    • valueDictionaryBytesBytes(): Map<Bytes, Bytes>
    • valueDictionaryStringString(): Map<String, String>
    • valueDictionaryStringBytes(): Map<String, Bytes>
    • valueDictionaryBytesString(): Map<Bytes, String>
    • toString(): String - displays truncated valueDictionaryStringString()
  • Cache miss
  • Error

See response objects for specific information.

await cacheClient.dictionarySetFields(
cacheName,
'test-dictionary',
new Map<string, string>([
['key1', 'value1'],
['key2', 'value2'],
])
);
const result = await cacheClient.dictionaryGetFields(cacheName, 'test-dictionary', ['key1', 'key2']);

// simplified style; assume the value was found
console.log(`Got fields from dictionary: ${result.value()!}`);

// pattern-matching style; safer for production code
switch (result.type) {
case CacheDictionaryGetFieldsResponse.Hit:
console.log('Values fetched successfully- ');
result.valueMap().forEach((value, key) => {
console.log(`${key} : ${value}`);
});
break;
case CacheDictionaryGetFieldsResponse.Miss:
console.log(`Dictionary 'test-dictionary' was not found in cache '${cacheName}'`);
break;
case CacheDictionaryGetFieldsResponse.Error:
throw new Error(
`An error occurred while attempting to call cacheDictionaryGetFields on dictionary 'test-dictionary' in cache '${cacheName}': ${result.errorCode()}: ${result.toString()}`
);
}
info
Full example code and imports can be found here

DictionaryIncrement

Adds to the value of a field, if and only if the existing value is a UTF-8 string representing a base 10 integer. If the field is missing from the dictionary, this method sets the field's value to the amount to increment by.

note

The resulting incremented value must be between -9223372036854775808 and 9223372036854775807, ie. a signed 64-bit integer. If not, there will be an error response.

Examples:

  • When the field does not exist, dictionaryIncrement(cache, dict, field, 10) will set the field's value to 10.
  • When the field = 5, dictionaryIncrement(cache, dict, field, 10) will set the field's value to 15.
  • When the field = ‘five’, it will respond with a FailedPreconditionException error.
NameTypeDescription
cacheNameStringName of the cache.
dictionaryNameStringName of the dictionary item to be retrieved.
fieldString/BytesName of the field in the dictionary item to be retrieved.
amountIntegerThe quantity to add to the value. May be positive, negative, or zero. Defaults to 1.
ttlCollectionTTL objectThis will come back as a TTL construct.
Method response object
  • Success
    • value(): integer - the new value after incrementing
    • toString(): String - displays the value()
  • Error

See response objects for specific information.

await cacheClient.dictionarySetField(cacheName, 'test-dictionary', 'test-field', '10');
const result = await cacheClient.dictionaryIncrement(cacheName, 'test-dictionary', 'test-field', 1);
switch (result.type) {
case CacheDictionaryIncrementResponse.Success:
console.log(`Field value incremented by 1. Result - ${result.valueNumber()}`);
break;
case CacheDictionaryIncrementResponse.Error:
throw new Error(
`An error occurred while attempting to call cacheDictionaryIncrement on dictionary 'test-dictionary' in cache '${cacheName}': ${result.errorCode()}: ${result.toString()}`
);
}
info
Full example code and imports can be found here

DictionaryRemoveField

Removes a field from a dictionary item.

NameTypeDescription
cacheNameStringName of the cache.
dictionaryNameStringName of the dictionary item to be retrieved.
fieldString/BytesName of the field in the dictionary item to be retrieved.
Method response object
  • Success
  • Error

See response objects for specific information.

await cacheClient.dictionarySetField(cacheName, 'test-dictionary', 'test-field', '10');
const result = await cacheClient.dictionaryRemoveField(cacheName, 'test-dictionary', 'test-field');
switch (result.type) {
case CacheDictionaryRemoveFieldResponse.Success:
console.log("Field removed successfully from dictionary 'test-dictionary'");
break;
case CacheDictionaryRemoveFieldResponse.Error:
throw new Error(
`An error occurred while attempting to call cacheDictionaryRemoveField on dictionary 'test-dictionary' in cache '${cacheName}': ${result.errorCode()}: ${result.toString()}`
);
}
info
Full example code and imports can be found here

DictionaryRemoveFields

Removes multiple fields from a dictionary item.

NameTypeDescription
cacheNameStringName of the cache.
dictionaryNameStringName of the dictionary item to be retrieved.
fieldsString[]/Bytes[]Name of the field in the dictionary item to be retrieved.
Method response object
  • Success
  • Error

See response objects for specific information.

await cacheClient.dictionarySetFields(
cacheName,
'test-dictionary',
new Map<string, string>([
['key1', 'value1'],
['key2', 'value2'],
])
);
const result = await cacheClient.dictionaryRemoveFields(cacheName, 'test-dictionary', ['key1', 'key2']);
switch (result.type) {
case CacheDictionaryRemoveFieldsResponse.Success:
console.log("Fields removed successfully from dictionary 'test-dictionary'");
break;
case CacheDictionaryRemoveFieldsResponse.Error:
throw new Error(
`An error occurred while attempting to call cacheDictionaryRemoveFields on dictionary 'test-dictionary' in cache '${cacheName}': ${result.errorCode()}: ${result.toString()}`
);
}
info
Full example code and imports can be found here

DictionarySetField

Sets a field:value pair in an existing dictionary item. If the dictionary item does not exist, it is created with the new field:value pair.

NameTypeDescription
cacheNameStringName of the cache.
dictionaryNameStringName of the dictionary item to be set.
fieldString/BytesName of the field in the dictionary item to be set.
valueString/BytesValue for the field to be set.
ttlCollectionTTL objectTTL for the dictionary item in cache. This TTL takes precedence over the TTL used when initializing a cache client.
Method response object
  • Success
  • Error

See response objects for specific information.

const result = await cacheClient.dictionarySetField(cacheName, 'test-dictionary', 'test-field', 'test-value');
switch (result.type) {
case CacheDictionarySetFieldResponse.Success:
console.log(`Field set successfully into cache '${cacheName}'`);
break;
case CacheDictionarySetFieldResponse.Error:
throw new Error(
`An error occurred while attempting to call cacheDictionarySetField on dictionary 'test-dictionary' in cache '${cacheName}': ${result.errorCode()}: ${result.toString()}`
);
}
info
Full example code and imports can be found here

DictionarySetFields

Sets several field:value pairs in a dictionary item. If the dictionary item does not exist, it is created with the new fields.

NameTypeDescription
cacheNameStringName of the cache.
dictionaryNameStringName of the dictionary item to be set.
fieldsString[]/Bytes[]Field:value pair to be added to the dictionary item by the set operation.
ttlCollectionTTL objectTTL for the dictionary item in cache. This TTL takes precedence over the TTL used when initializing a cache client.
Method response object
  • Success
  • Error

See response objects for specific information.

const result = await cacheClient.dictionarySetFields(
cacheName,
'test-dictionary',
new Map<string, string>([
['key1', 'value1'],
['key2', 'value2'],
])
);
switch (result.type) {
case CacheDictionarySetFieldsResponse.Success:
console.log(`Fields set successfully into cache '${cacheName}'`);
break;
case CacheDictionarySetFieldsResponse.Error:
throw new Error(
`An error occurred while attempting to call cacheDictionarySetFields on dictionary 'test-dictionary' in cache '${cacheName}': ${result.errorCode()}: ${result.toString()}`
);
}
info
Full example code and imports can be found here

DictionaryLength

Get the length of an existing dictionary item

NameTypeDescription
cacheNameStringName of the cache.
dictionaryNameStringName of the dictionary item to be checked.
Method response object
  • Hit
    • length(): Number
  • Miss
  • Error

See response objects for specific information.

  let _length: u32 = cache_client
.dictionary_length(cache_name, "dictionary_name")
.await?
.try_into()
.expect("Expected a dictionary length!");
info
Full example code and imports can be found here