Sorted set collections
Momento Cacheのソート済みセットは、値(String、Byte[]など)とスコア(符号付きダブル64ビットfloat)のペアを持つ一意の要素のコレクションです。ソートされたセットの要素は、スコア順に並べられます。
Momento コレクションタイプは、CollectionTTLを使用してTTL動作を指定します。これは、すべての "write" 操作のオプション引数です。
Sorted set methods
SortedSetPutElement
ソートされたセットに新しい要素を追加したり、既存のソートされたセット要素を更新したりします。
-
セットが存在しない場合、このメソッドは渡された要素を持つ新しいソート済みセットコレクションを作成します。
-
セットが存在する場合、その 値 が存在しなければ、その要素はソートされたセットに追加されます。その要素の値が存在する場合、その要素は上書きされ ます。
Name | Type | Description |
---|---|---|
cacheName | String | キャッシュの名前 |
setName | String | 変更するソートセットコレクションの名前。 |
value | String | Byte[] | The value of the element to be added to the sorted set by this operation. |
score | number | The score of the element to be added to the sorted set by this operation. |
ttl | CollectionTTL object | TTL for the sorted set collection. This TTL takes precedence over the TTL used when initializing a cache connection client. |
Method response object
- Success
- Error
詳しくはレスポンスオブジェクトを参照してください。
- JavaScript
- Rust
- Elixir
const result = await cacheClient.sortedSetPutElement(cacheName, 'test-sorted-set', 'test-value', 5);
switch (result.type) {
case CacheSortedSetPutElementResponse.Success:
console.log("Value 'test-value' with score '5' added successfully to sorted set 'test-sorted-set'");
break;
case CacheSortedSetPutElementResponse.Error:
throw new Error(
`An error occurred while attempting to call cacheSortedSetPutElement on sorted set 'test-sorted-set' in cache '${cacheName}': ${result.errorCode()}: ${result.toString()}`
);
}
cache_client
.sorted_set_put_element(cache_name, "sorted_set_name", "value", 1.0)
.await?;
println!("Element added to sorted set");
case Momento.CacheClient.sorted_set_put_element(
client,
"test-cache",
"test-sorted-set",
"test-value",
5.0
) do
{:ok, _} ->
IO.puts(
"Value 'test-value' with score '5' added successfully to sorted set 'test-sorted-set'"
)
{:error, error} ->
IO.puts(
"An error occurred while attempting to put an element into sorted set 'test-sorted-set' in cache 'test-cache': #{error.error_code}"
)
raise error
end
SortedSetPutElements
Adds new or updates existing sorted set elements in a sorted set collection.
-
If the set does not exist, this method creates a new sorted set collection with the element(s) passed in.
-
If the set exists, for each SortedSetElement in the array, each element is added to the sorted set if that value doesn't exist. If the value of that element does exist, that element is overwritten.
Name | Type | Description |
---|---|---|
cacheName | String | キャッシュの名前 |
setName | String | 変更するソートセットコレクションの名前。 |
elements | SortedSetElement[] | この操作によってソートされたセットに追加される要素。 |
ttl | CollectionTTL object | ソートされたセットコレクションの TTL。この TTL は、キャッシュ接続クライアントを初期化するときに使用される TTL よりも優先されます。 |
Method response object
- Success
- Error
詳しくはレスポンスオブジェクトを参照してください。
- JavaScript
- Rust
- Elixir
const result = await cacheClient.sortedSetPutElements(
cacheName,
'test-sorted-set',
new Map<string, number>([
['key1', 10],
['key2', 20],
])
);
switch (result.type) {
case CacheSortedSetPutElementsResponse.Success:
console.log("Elements added successfully to sorted set 'test-sorted-set'");
break;
case CacheSortedSetPutElementsResponse.Error:
throw new Error(
`An error occurred while attempting to call cacheSortedSetPutElements on sorted set 'test-sorted-set' in cache '${cacheName}': ${result.errorCode()}: ${result.toString()}`
);
}
cache_client
.sorted_set_put_elements(
cache_name,
"sorted_set_name",
vec![("value1", 1.0), ("value2", 2.0)],
)
.await?;
println!("Elements added to sorted set");
case Momento.CacheClient.sorted_set_put_elements(client, "test-cache", "test-sorted-set", [
{"key1", 10.0},
{"key2", 20.0}
]) do
{:ok, _} ->
IO.puts("Elements added successfully to sorted set 'test-sorted-set'")
{:error, error} ->
IO.puts(
"An error occurred while attempting to put elements into sorted set 'test-sorted-set' in cache 'test-cache': #{error.error_code}"
)
raise error
end
SortedSetFetchByRank
ソートされた集合の要素を取得し、オプションで順位でフィルタリングして、昇順または降順で返します。
Name | Type | Description |
---|---|---|
cacheName | String | キャッシュの名前 |
setName | String | ソートされたセットコレクションの名前。 |
startRank | Optional[integer] | 結果の開始順位。デフォルトはゼロです。 |
endRank | Optional[integer] | 結果の排他的な終了順位。デフォルトは null である。 |
order | Ascending | Descending | ソートされたセットを返したい順番。 |
Method response object
- Hit
- elements(): SortedSetElement[]
- Miss
- Error
詳しくはレスポンスオブジェクトを参照してください。
- JavaScript
- Rust
- Elixir
await cacheClient.sortedSetPutElements(
cacheName,
'test-sorted-set',
new Map<string, number>([
['key1', 10],
['key2', 20],
])
);
const result = await cacheClient.sortedSetFetchByRank(cacheName, 'test-sorted-set');
// simplified style; assume the value was found
console.log(`Sorted set fetched: ${result.value()!}`);
// pattern-matching style; safer for production code
switch (result.type) {
case CacheSortedSetFetchResponse.Hit:
console.log("Values from sorted set 'test-sorted-set' fetched by rank successfully- ");
result.value().forEach(res => {
console.log(`${res.value} : ${res.score}`);
});
break;
case CacheSortedSetFetchResponse.Miss:
console.log(`Sorted Set 'test-sorted-set' was not found in cache '${cacheName}'`);
break;
case CacheSortedSetFetchResponse.Error:
throw new Error(
`An error occurred while attempting to call cacheSortedSetFetchByRank on sorted set 'test-sorted-set' in cache '${cacheName}': ${result.errorCode()}: ${result.toString()}`
);
}
let response = cache_client
.sorted_set_fetch_by_rank(
cache_name,
"sorted_set_name",
SortedSetOrder::Ascending,
None,
None,
)
.await?;
match response {
SortedSetFetchResponse::Hit { value } => match value.into_strings() {
Ok(vec) => {
println!("Fetched elements: {:?}", vec);
}
Err(error) => {
eprintln!("Error converting values into strings: {}", error);
}
},
SortedSetFetchResponse::Miss => println!("Cache miss"),
}
{:ok, _} =
Momento.CacheClient.sorted_set_put_elements(client, "test-cache", "test-sorted-set", [
{"key1", 10.0},
{"key2", 20.0}
])
case Momento.CacheClient.sorted_set_fetch_by_rank(client, "test-cache", "test-sorted-set") do
{:ok, hit} ->
IO.puts("Values from sorted set 'test-sorted-set' fetched by rank successfully:")
IO.inspect(hit.value)
:miss ->
IO.puts("Sorted Set 'test-sorted-set' was not found in cache 'test-cache'")
{:error, error} ->
IO.puts(
"An error occurred while attempting to fetch by rank on sorted set 'test-sorted-set' in cache 'test-cache': #{error.error_code}"
)
raise error
end
SortedSetFetchByScore
ソートされた集合の要素を取得し、スコアでフィルタリングして昇順または降順で返します。
Name | Type | Description |
---|---|---|
cacheName | String | キャッシュの名前 |
setName | String | ソートされたセットコレクションの名前。 |
minScore | Optional[double] | 結果の低スコアを含む。デフォルトは -inf で、最低スコアまで含める。 |
maxScore | Optional[double] | 結果のハイスコア。デフォルトは +inf である。 |
order | Ascending | Descending | ソートされたセットを返したい順番。 |
offset | Optional[int] | フィルタリングされたリストから結果を返し始めるオフセット。デフォルトは0、つまりフィルタリングしない。指定する場合は、非負でなければならない。 |
count | Optional[int] | フィルタリングされたリストから返す結果の最大数。デフォルトは null で、つまり無制限である。指定する場合は、厳密に正数でなければならない。 |
Method response object
- Hit
- elements(): SortedSetElement[]
- Miss
- Error
詳しくはレスポンスオブジェ クトを参照してください。
- JavaScript
- Rust
- Elixir
await cacheClient.sortedSetPutElements(
cacheName,
'test-sorted-set',
new Map<string, number>([
['key1', 100],
['key2', 25],
])
);
const result = await cacheClient.sortedSetFetchByScore(cacheName, 'test-sorted-set');
// simplified style; assume the value was found
console.log(`Fetched values from sorted set: ${result.value()!}`);
// pattern-matching style; safer for production code
switch (result.type) {
case CacheSortedSetFetchResponse.Hit:
console.log("Values from sorted set 'test-sorted-set' fetched by score successfully- ");
result.value().forEach(res => {
console.log(`${res.value} : ${res.score}`);
});
break;
case CacheSortedSetFetchResponse.Miss:
console.log(`Sorted Set 'test-sorted-set' was not found in cache '${cacheName}'`);
break;
case CacheSortedSetFetchResponse.Error:
throw new Error(
`An error occurred while attempting to call cacheSortedSetFetchByScore on sorted set 'test-sorted-set' in cache '${cacheName}': ${result.errorCode()}: ${result.toString()}`
);
}
let response = cache_client
.sorted_set_fetch_by_score(cache_name, "sorted_set_name", SortedSetOrder::Ascending)
.await?;
match response {
SortedSetFetchResponse::Hit { value } => match value.into_strings() {
Ok(vec) => {
println!("Fetched elements: {:?}", vec);
}
Err(error) => {
eprintln!("Error converting values into strings: {}", error);
}
},
SortedSetFetchResponse::Miss => println!("Cache miss"),
}
{:ok, _} =
Momento.CacheClient.sorted_set_put_elements(client, "test-cache", "test-sorted-set", [
{"key1", 10.0},
{"key2", 20.0}
])
case Momento.CacheClient.sorted_set_fetch_by_score(client, "test-cache", "test-sorted-set") do
{:ok, hit} ->
IO.puts("Values from sorted set 'test-sorted-set' fetched by score successfully:")
IO.inspect(hit.value)
:miss ->
IO.puts("Sorted Set 'test-sorted-set' was not found in cache 'test-cache'")
{:error, error} ->
IO.puts(
"An error occurred while attempting to fetch by score on sorted set 'test-sorted-set' in cache 'test-cache': #{error.error_code}"
)
raise error
end
SortedSetGetScore
Gets an element's score from the sorted set, indexed by value.
Name | Type | Description |
---|---|---|
cacheName | String | キャッシュの名前 |
setName | String | ソートされたセットコレクションの名前。 |
value | String | Bytes | スコアを取得する値。 |
Method response object
- Cache hit
- Score: number
- Cache miss (if the sorted set does not exist)
- Error
詳しくはレスポンスオブジェクトを参照してください。
- JavaScript
- Rust
- Elixir
await cacheClient.sortedSetPutElements(
cacheName,
'test-sorted-set',
new Map<string, number>([
['key1', 10],
['key2', 20],
])
);
const result = await cacheClient.sortedSetGetScore(cacheName, 'test-sorted-set', 'key1');
// simplified style; assume the value was found
console.log(`Element with value 'key1' has score: ${result.score()!}`);
// pattern-matching style; safer for production code
switch (result.type) {
case CacheSortedSetGetScoreResponse.Hit:
console.log(`Element with value 'key1' has score: ${result.score()}`);
break;
case CacheSortedSetGetScoreResponse.Miss:
console.log(`Sorted Set 'test-sorted-set' was not found in cache '${cacheName}'`);
break;
case CacheSortedSetGetScoreResponse.Error:
throw new Error(
`An error occurred while attempting to call cacheSortedSetFetchGetScore on sorted set 'test-sorted-set' in cache '${cacheName}': ${result.errorCode()}: ${result.toString()}`
);
}
let _score: f64 = cache_client
.sorted_set_get_score(cache_name, "sorted_set_name", "value1")
.await?
.try_into()
.expect("Expected a score!");
{:ok, _} =
Momento.CacheClient.sorted_set_put_elements(client, "test-cache", "test-sorted-set", [
{"key1", 10.0},
{"key2", 20.0}
])
case Momento.CacheClient.sorted_set_get_score(client, "test-cache", "test-sorted-set", "key1") do
{:ok, hit} ->
IO.puts("Element with value 'key1' has score: #{hit.score}")
:miss ->
IO.puts(
"Value 'key1' not found in sorted set, or sorted set 'test-sorted-set' was not found in cache 'test-cache'"
)
{:error, error} ->
IO.puts(
"An error occurred while attempting to get the score of 'key1' in sorted set 'test-sorted-set' in cache 'test-cache': #{error.error_code}"
)
raise error
end
SortedSetGetScores
ソートされたセットから、値でインデックス付けされた要素のリストに関連付けられたスコアを取得します。
Name | Type | Description |
---|---|---|
cacheName | String | キャッシュの名前 |
setName | String | ソートされたセットコレクションの名前。 |
values | String[] | Bytes[] | スコアを取得する値の配列。 |
Method response object
- Cache hit
- Elements() (returns hit/miss per element)
- Hit:
- Score: number
- Miss
- Hit:
- Elements() (returns hit/miss per element)
- Cache miss (if the sorted set does not exist)
- Error
詳しくはレスポンスオブジェクトを参照してください。
- JavaScript
- Elixir
await cacheClient.sortedSetPutElements(
cacheName,
'test-sorted-set',
new Map<string, number>([
['key1', 10],
['key2', 20],
])
);
const result = await cacheClient.sortedSetGetScores(cacheName, 'test-sorted-set', ['key1', 'key2']);
// simplified style; assume the value was found
console.log(`Retrieved scores from sorted set: ${result.value()!}`);
// pattern-matching style; safer for production code
switch (result.type) {
case CacheSortedSetGetScoresResponse.Hit:
console.log('Element scores retrieved successfully -');
result.valueMap().forEach((value, key) => {
console.log(`${key} : ${value}`);
});
break;
case CacheSortedSetGetScoresResponse.Miss:
console.log(`Sorted Set 'test-sorted-set' was not found in cache '${cacheName}'`);
break;
case CacheSortedSetGetScoresResponse.Error:
throw new Error(
`An error occurred while attempting to call cacheSortedSetFetchGetScores on sorted set 'test-sorted-set' in cache '${cacheName}': ${result.errorCode()}: ${result.toString()}`
);
}
{:ok, _} =
Momento.CacheClient.sorted_set_put_elements(client, "test-cache", "test-sorted-set", [
{"key1", 10.0},
{"key2", 20.0}
])
case Momento.CacheClient.sorted_set_get_scores(client, "test-cache", "test-sorted-set", [
"key1",
"key2"
]) do
{:ok, hit} ->
IO.puts("Element scores retrieved successfully:")
IO.inspect(hit.value)
:miss ->
IO.puts("Sorted Set 'test-sorted-set' was not found in cache 'test-cache'")
{:error, error} ->
IO.puts(
"An error occurred while attempting to get the scores of values in sorted set 'test-sorted-set' in cache 'test-cache': #{error.error_code}"
)
raise error
end
SortedSetRemoveElement
値でインデックス付けされた、ソートされたセットから要素を削除します。
Name | Type | Description |
---|---|---|
cacheName | String | キャッシュの名前 |
setName | String | 変更するセットコレクションの名前。 |
value | String | Bytes | この操作によって削除される要素の値。 |
Method response object
- Success
- Error
詳しくはレスポンスオブジェクトを参照してください。
- JavaScript
- Elixir
await cacheClient.sortedSetPutElement(cacheName, 'test-sorted-set', 'test-value', 10);
const result = await cacheClient.sortedSetRemoveElement(cacheName, 'test-sorted-set', 'test-value');
switch (result.type) {
case CacheSortedSetRemoveElementResponse.Success:
console.log("Element with value 'test-value' removed successfully");
break;
case CacheSortedSetRemoveElementResponse.Error:
throw new Error(
`An error occurred while attempting to call cacheSortedSetRemoveElement on sorted set 'test-sorted-set' in cache '${cacheName}': ${result.errorCode()}: ${result.toString()}`
);
}
{:ok, _} =
Momento.CacheClient.sorted_set_put_element(
client,
"test-cache",
"test-sorted-set",
"key1",
10.0
)
case Momento.CacheClient.sorted_set_remove_element(
client,
"test-cache",
"test-sorted-set",
"key1"
) do
{:ok, _} ->
IO.puts("Element with value 'key1' removed successfully")
{:error, error} ->
IO.puts(
"An error occurred while attempting to remove value 'key1' from sorted set 'test-sorted-set' in cache 'test-cache': #{error.error_code}"
)
raise error
end
SortedSetRemoveElements
値でインデックス付けされたソートされたセットから要素を削除します。
Name | Type | Description |
---|---|---|
cacheName | String | キャッシュの名前 |
setName | String | 変更するセットコレクションの名前。 |
values | String[] | Bytes[] | この操作によって削除される要素の値。 |
You can remove either one or a specific group of elements.
Method response object
- Success
- Error
詳しくはレスポンスオブジェクトを参照してください。
- JavaScript
- Rust
- Elixir
await cacheClient.sortedSetPutElements(
cacheName,
'test-sorted-set',
new Map<string, number>([
['key1', 10],
['key2', 20],
])
);
const result = await cacheClient.sortedSetRemoveElements(cacheName, 'test-sorted-set', ['key1', 'key2']);
switch (result.type) {
case CacheSortedSetRemoveElementsResponse.Success:
console.log("Elements with value 'key1' and 'key2 removed successfully");
break;
case CacheSortedSetRemoveElementsResponse.Error:
throw new Error(
`An error occurred while attempting to call cacheSortedSetRemoveElements on sorted set 'test-sorted-set' in cache '${cacheName}': ${result.errorCode()}: ${result.toString()}`
);
}
cache_client
.sorted_set_remove_elements(cache_name, "sorted_set_name", vec!["value1", "value2"])
.await?;
println!("Elements removed from sorted set");
{:ok, _} =
Momento.CacheClient.sorted_set_put_elements(client, "test-cache", "test-sorted-set", [
{"key1", 10.0},
{"key2", 20.0}
])
case Momento.CacheClient.sorted_set_remove_elements(client, "test-cache", "test-sorted-set", [
"key1",
"key2"
]) do
{:ok, _} ->
IO.puts("Elements with value 'key1' and 'key2' removed successfully")
{:error, error} ->
IO.puts(
"An error occurred while attempting remove values from sorted set 'test-sorted-set' in cache 'test-cache': #{error.error_code}"
)
raise error
end
SortedSetGetRank
指定されたソートされた集合の中で、要素はどの位置にあるか?が分かります。
Name | Type | Description |
---|---|---|
cacheName | String | キャッシュの名前 |
setName | String | 変更されるコレクションの名前 |
value | String | Bytes | スコアを取得する要素の値 |
order | Optional[Ascending | Descending] | ソートされた集合が順位を決定するためにソートされる順序 |
Method response object
- Hit
- Rank: integer
- Miss
- Error
詳しくはレスポンスオブジェクトを参照してください。
- JavaScript
- Rust
- Elixir
await cacheClient.sortedSetPutElements(
cacheName,
'test-sorted-set',
new Map<string, number>([
['key1', 10],
['key2', 20],
['key3', 30],
])
);
const result = await cacheClient.sortedSetGetRank(cacheName, 'test-sorted-set', 'key2');
// simplified style; assume the value was found
console.log(`Element with value 'key1' has rank: ${result.rank()!}`);
// pattern-matching style; safer for production code
switch (result.type) {
case CacheSortedSetGetRankResponse.Hit:
console.log(`Element with value 'key1' has rank: ${result.rank()}`);
break;
case CacheSortedSetGetRankResponse.Miss:
console.log(`Sorted Set 'test-sorted-set' was not found in cache '${cacheName}'`);
break;
case CacheSortedSetGetRankResponse.Error:
throw new Error(
`An error occurred while attempting to call cacheSortedSetFetchGetRank on sorted set 'test-sorted-set' in cache '${cacheName}': ${result.errorCode()}: ${result.toString()}`
);
}
let _rank: u64 = cache_client
.sorted_set_get_rank(cache_name, "sorted_set_name", "value1")
.await?
.try_into()
.expect("Expected a rank!");
{:ok, _} =
Momento.CacheClient.sorted_set_put_elements(client, "test-cache", "test-sorted-set", [
{"key1", 10.0},
{"key2", 20.0}
])
case Momento.CacheClient.sorted_set_get_rank(client, "test-cache", "test-sorted-set", "key1") do
{:ok, hit} ->
IO.puts("Element with value 'key1' has rank: #{hit.rank}")
:miss ->
IO.puts(
"Value 'key1' not found in sorted set, or sorted set 'test-sorted-set' was not found in cache 'test-cache'"
)
{:error, error} ->
IO.puts(
"An error occurred while attempting to get the rank of 'key1' in sorted set 'test-sorted-set' in cache 'test-cache': #{error.error_code}"
)
raise error
end