MemoryStoreHashMap

Mostrar obsoleto

*Este contenido se traduce usando la IA (Beta) y puede contener errores. Para ver esta página en inglés, haz clic en aquí.

No creable
No replicado

Proporciona acceso a un mapa de hash dentro de MemoryStoreService . Un mapa de hash es una colección de elementos donde las claves de cadena se asocian con valores aleatorios (hasta el tamaño máximo permitido -- ver Almacenes de memoria). Las claves no tienen garantías de orden.

Resumen

Métodos

  • GetAsync(key : string):Variant
    Proporciona

    Recupera el valor de una llave en el mapa de carga.

  • Class.MemoryStore HashMapPages objeto de regreso para enumerar a través de los elementos en el mapa de hash.

  • RemoveAsync(key : string):void
    Proporciona

    Elimina un elemento del mapa de hash.

  • SetAsync(key : string,value : Variant,expiration : number):bool
    Proporciona

    Establece el valor de una llave en el mapa de carga.

  • UpdateAsync(key : string,transformFunction : function,expiration : number):Variant
    Proporciona

    Recupera el valor de una llave de un mapa de hash y te permite actualizarlo a un nuevo valor.

Propiedades

Métodos

GetAsync

Variant
Proporciona

Recupera el valor de una llave en el mapa de carga.

Parámetros

key: string

La clave cuyo valor desea recuperar.


Devuelve

Variant

El valor, o nulo, si la llave no existe.

Muestras de código

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
Proporciona

Devuelve un objeto MemoryStoreHashMapPages para enumerar a través de los elementos en el mapa de clasificación. El rango válido es 1 a 200 incluidos.

Parámetros

count: number

Número máximo de artículos posibles que se pueden devolver.


Devuelve

Una instancia de MemoryStoreHashMapPages que lista los elementos como MemoryStoreHashMapPages instancias.

Muestras de código

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

void
Proporciona

Elimina un elemento del mapa de hash.

Parámetros

key: string

La clave para eliminar.


Devuelve

void

Muestras de código

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

Proporciona

Establece el valor de una llave en el mapa de carga, sobrescribiendo cualquier valor existente.

Parámetros

key: string

La clave cuyo valor para establecer.

value: Variant

El valor para establecer.

expiration: number

La expiración del artículo en segundos, después de lo cual el artículo se elimina automáticamente del mapa de hash. El tiempo de máximo de expiración es 45 días (3,888,000 segundos).


Devuelve

Muestras de código

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
Proporciona

Recupera el valor de una llave de un mapa de hash y te permite actualizarlo a un nuevo valor.

Este método acepta una función de llamada que recupera el valor de la llave existente y lo pasa a una función de transformación, que devuelve el nuevo valor para el objeto, con estas excepciones:

  • Si la clave no existe, el valor antiguo pasado a la función es nulo.
  • Si la función devuelve nulo, la actualización se cancela.

El nuevo valor se guarda solo si la clave no se actualizó (por ejemplo, por un servidor de juego diferente) desde el momento en que se lee. Si el valor cambió en ese momento, la función de transformación se llama nuevamente con el valor de artículo más reciente. Este ciclo se repite hasta que el valor se guarde con éxito o la función de transformación devuelva nil para cancelar la operación.

Parámetros

key: string

La clave cuyo valor desea actualización.

transformFunction: function

La función de transformación, que proporcionar. Esta función toma el valor antiguo como entrada y devuelve el nuevo valor.

expiration: number

La expiración del artículo en segundos, después de lo cual el artículo se elimina automáticamente del mapa de hash. El tiempo de máximo de expiración es 45 días (3,888,000 segundos).


Devuelve

Variant

El último valor devuelto por la función de transformación.

Muestras de código

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)

Eventos