MemoryStoreHashMap
*Este conteúdo é traduzido por IA (Beta) e pode conter erros. Para ver a página em inglês, clique aqui.
Fornece acesso a um mapa de hash dentro de MemoryStoreService .Um mapa de hash é uma coleção de itens onde chaves de corda são associadas a valores arbitrários (até o tamanho máximo permitido -- veja Armazenamentos de Memória).As chaves não têm garantias de ordem.
Resumo
Métodos
Recupera o valor de uma chave no mapa de hash.
Retorna um objeto MemoryStoreHashMapPages para enumerar através de itens no mapa de hash.
Remove um item do mapa de hash.
Define o valor de uma chave no mapa de hash.
Recupera o valor de uma chave de um mapa de hash e permite que você atualize-a para um novo valor.
Propriedades
Métodos
GetAsync
Recupera o valor de uma chave no mapa de hash.
Parâmetros
A chave cujo valor você deseja recuperar.
Devolução
O valor, ou nil se a chave não existir.
Amostras de código
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
ListItemsAsync
Retorna um objeto MemoryStoreHashMapPages para enumerar através de itens no mapa de hash. O alcance válido é de 1 a 200 inclusivo.
Parâmetros
Máximo número possível de itens que podem ser devolvidos.
Devolução
Uma instância MemoryStoreHashMapPages que enumera os itens como MemoryStoreHashMapPages instâncias.
Amostras de código
The code below lists all the items in a Memory Store 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
Remove um item do mapa de hash.
Parâmetros
A chave para remover.
Devolução
Amostras de código
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
Define o valor de uma chave no mapa de hash, substituindo qualquer valor existente.
Parâmetros
A chave cujo valor para configurar.
O valor para configurar.
Expiração do item em segundos, após os quais o item é automaticamente removido do mapa de hash.O tempo máximo de expiração é de 45 dias (3.888.000 segundos).
Devolução
Amostras de código
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
Recupera o valor de uma chave de um mapa de hash e permite que você atualize-a para um novo valor.
Este método aceita uma função de retorno que recupera o valor da chave existente e o passa para uma função de transformação, que retorna o novo valor para o item, com essas exceções:
- Se a chave não existir, o antigo valor passado para a função é nil .
- Se a função retornar nil, a atualização é cancelada.
O novo valor é salvo somente se a chave não foi atualizada (por exemplo, por um servidor de jogo diferente) desde o momento em que foi ler.Se o valor mudou nesse tempo, a função de transformação é chamada novamente com o valor mais recente do item.Este ciclo se repete até que o valor seja salvo com sucesso ou a função de transformação retorne nil para abortar a operação.
Parâmetros
A chave cujo valor você deseja atualização.
A função de transformação, que você fornecer / proporcionar. Essa função toma o valor antigo como entrada e retorna o novo valor.
Expiração do item em segundos, após os quais o item é automaticamente removido do mapa de hash.O tempo máximo de expiração é de 45 dias (3.888.000 segundos).
Devolução
O último valor retornado pela função de transformação.
Amostras de código
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.
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)