MemoryStoreHashMap

Afficher les obsolètes

*Ce contenu est traduit en utilisant l'IA (Beta) et peut contenir des erreurs. Pour consulter cette page en anglais, clique ici.

Création impossible
Non répliqué

Fournit l'accès à une carte de hachage dans MemoryStoreService .Une carte de hachage est une collection d'éléments où les clés de chaîne sont associées à des valeurs arbitraires (jusqu'à la taille maximale autorisée -- voir magasins de mémoire).Les clés n'ont pas de garanties d'ordre.

Résumé

Méthodes

Propriétés

Méthodes

GetAsync

Variant
Rendement

Récupère la valeur d'une clé dans la carte de hachage.

Paramètres

key: string

La clé dont la valeur vous voulez récupérer.

Valeur par défaut : ""

Retours

Variant

La valeur, ou nil si la clé n'existe pas.

Échantillons de code

Getting data from a MemoryStore Hash Map

local MemoryStoreService = game:GetService("MemoryStoreService")
local hashMap = MemoryStoreService:GetHashMap("HashMap1")
local key = "User_1234"
local value = 1000
local expiration = 30
local setSuccess, _ = pcall(function()
return hashMap:SetAsync(key, value, expiration)
end)
if setSuccess then
print("Set succeeded!")
end
local item
local getSuccess, getError = pcall(function()
item = hashMap:GetAsync(key)
end)
if getSuccess then
print(item)
else
warn(getError)
end
Rendement

Renvoie un objet MemoryStoreHashMapPages pour l'enumeration à travers les éléments de la carte de hachage. La portée valide est de 1 à 200 inclusifs.

Paramètres

count: number

Nombre maximum d'éléments possibles à retourner.

Valeur par défaut : ""

Retours

Une instance MemoryStoreHashMapPages qui liste les articles en tant que MemoryStoreHashMapPages instances.

Échantillons de code

The code below lists all the items in a Memory Store Hash Map.

Listing items in a MemoryStore Hash Map

local MemoryStoreService = game:GetService("MemoryStoreService")
local testHashMap = MemoryStoreService:GetHashMap("HashMap1")
local EXPIRATION = 600
local NUM_TEST_ITEMS = 32
local function populateHashMap(hashMap: MemoryStoreHashMap, numItems: number): { [string]: any }
print("Setting HashMap data...")
local createdItems = {}
for index = 1, numItems do
local key = tostring(index) -- HashMap keys must be strings
local value = `{key}_test_value`
local success, result = pcall(hashMap.SetAsync, hashMap, key, value, EXPIRATION)
if success then
createdItems[key] = value
else
warn(`Error setting key {key}: {result}`)
end
end
print("Done setting HashMap data.")
return createdItems
end
local function getItemsFromAllPages(pages: MemoryStoreHashMapPages): { [string]: any }
-- Purely for logging purposes, we track what page number we're on
local currentPageNumber = 1
local retrievedItems = {}
while not pages.IsFinished do
print(`Getting items on page {currentPageNumber}...`)
local items = pages:GetCurrentPage()
for _, entry in pairs(items) do
print(`\t{entry.key}: {entry.value}`)
retrievedItems[entry.key] = entry.value
end
-- Advance pages if there are more pages to read
if not pages.IsFinished then
pages:AdvanceToNextPageAsync()
currentPageNumber += 1
end
end
print("Finished reading all pages")
return retrievedItems
end
local function compareAllItems(retrievedItems: { [string]: any }, expectedItems: { [string]: any }): number
print("Comparing retrieved items to expected items...")
local numMatchingItems = 0
for key, expectedValue in pairs(expectedItems) do
if retrievedItems[key] == expectedValue then
numMatchingItems += 1
else
warn(`Mismatched retrieved value for key {key}: expected {expectedValue}, retrieved {retrievedItems[key]}`)
end
end
print("Comparison complete!")
return numMatchingItems
end
-- Keys added to the hashmap are also added to this expectedItems table.
-- Later, the retrieved hashmap items will be compared against this table of expected items.
local expectedItems = populateHashMap(testHashMap, NUM_TEST_ITEMS)
-- Getting pages can error. In this case, we will let it error and stop program execution,
-- but you may want to pcall it and handle it differently.
print(`Getting HashMap pages with ListItemsAsync...`)
local pages = testHashMap:ListItemsAsync(NUM_TEST_ITEMS)
local retrievedItems = getItemsFromAllPages(pages)
local numMatchingItems = compareAllItems(retrievedItems, expectedItems)
-- If there were no errors setting or getting items, all items should match.
print(`Program complete. {numMatchingItems}/{NUM_TEST_ITEMS} retrieved items matched the expected values.`)

RemoveAsync

()
Rendement

Supprime un élément de la carte de hachage.

Paramètres

key: string

La clé à retirer.

Valeur par défaut : ""

Retours

()

Échantillons de code

Removing data from a MemoryStore Hash Map

local MemoryStoreService = game:GetService("MemoryStoreService")
local hashMap = MemoryStoreService:GetHashMap("HashMap1")
local key = "User_1234"
local value = 1000
local expiration = 30
local setSuccess, setError = pcall(function()
return hashMap:SetAsync(key, value, expiration)
end)
if not setSuccess then
warn(setError)
end
local removeSuccess, removeError = pcall(function()
hashMap:RemoveAsync(key)
end)
if removeSuccess then
print("Remove succeeded!")
else
warn(removeError)
end

SetAsync

Rendement

Définit la valeur d'une clé dans la carte de hachage, en remplaçant toute valeur existante.

Paramètres

key: string

La clé dont la valeur doit être configurer.

Valeur par défaut : ""
value: Variant

La valeur à configurer.

Valeur par défaut : ""
expiration: number

Expiration de l'élément en secondes, après quoi l'élément est automatiquement supprimé de la carte de hachage.Le temps d'expiration maximum est de 45 jours (3 888 000 secondes).

Valeur par défaut : ""

Retours

Échantillons de code

Adding data to a MemoryStore Hash Map

local MemoryStoreService = game:GetService("MemoryStoreService")
local hashMap = MemoryStoreService:GetHashMap("HashMap1")
local key = "User_1234"
local value = 1000
local expiration = 30
local setSuccess, setError = pcall(function()
return hashMap:SetAsync(key, value, expiration)
end)
if setSuccess then
print("Set succeeded!")
else
warn(setError)
end

UpdateAsync

Variant
Rendement

Récupère la valeur d'une clé à partir d'une carte de hachage et vous permet de la mettre à jour à une nouvelle valeur.

Cette méthode accepte une fonction de rappel qui récupère la valeur clé existante et la transmet à une fonction de transformation, qui renvoie la nouvelle valeur pour l'item, avec ces exceptions :

  • Si la clé n'existe pas, la valeur ancienne transmise à la fonction est nil .
  • Si la fonction renvoie nil , la mise à jour est annulée.

La nouvelle valeur est sauvegardée seulement si la clé n'a pas été mise à jour (par exemple, par un serveur de jeu différent) depuis le moment où elle a été lue.Si la valeur a changé en ce temps, la fonction de transformation est appelée à nouveau avec la valeur de l'élément le plus récent.Ce cycle se répète jusqu'à ce que la valeur soit enregistrée avec succès ou que la fonction de transformation renvoie nil pour annuler l'opération.

Paramètres

key: string

La clé dont la valeur vous voulez mettre à jour.

Valeur par défaut : ""
transformFunction: function

La fonction de transformation, que vous fournir. Cette fonction prend la valeur ancienne comme entrée et renvoie la nouvelle valeur.

Valeur par défaut : ""
expiration: number

Expiration de l'élément en secondes, après quoi l'élément est automatiquement supprimé de la carte de hachage.Le temps d'expiration maximum est de 45 jours (3 888 000 secondes).

Valeur par défaut : ""

Retours

Variant

La dernière valeur retournée par la fonction de transformation.

Échantillons de code

This sample updates the count of some resource in a shared inventory. The use of MemoryStoreHashMap:UpdateAsync() ensures that all player contributions make their way into this shared inventory, even if the contributions occur simultaneously. The function enforces a max resource count of 500.

Updating a Memory Store Hash Map

local MemoryStoreService = game:GetService("MemoryStoreService")
local hashMap = MemoryStoreService:GetHashMap("ResourceInventory")
local function contributeResources(itemResource, addedCount)
local success, newResourceCount = pcall(function()
return hashMap:UpdateAsync(itemResource, function(resource)
resource = resource or { count = 0 }
resource.count = resource.count + addedCount
-- ensure we don't exceed the maximum resource count
if resource.count > 500 then
resource.count = 500
end
return resource
end, 1200)
end)
if success then
print(newResourceCount)
end
end
contributeResources("myResource", 50)

Évènements