MemoryStoreHashMap

Pokaż przestarzałe

*Ta zawartość została przetłumaczona przy użyciu narzędzi AI (w wersji beta) i może zawierać błędy. Aby wyświetlić tę stronę w języku angielskim, kliknij tutaj.

Brak możliwości tworzenia
Bez replikacji

Dostarcza dostęp do mapy haszowej w MemoryStoreService. Mapa haszowa to zbiór przedmiotów, w których klucze są powiązane z dowolnymi wartościami (do maksymalnego rozmiaru pozwolonego - patrz Pamięci). Klucze nie mają gwarancji sortowania.

Podsumowanie

Metody

Właściwości

Metody

GetAsync

Variant
Wynik

Odzyskuje wartość klucza w tabeli haszowania.

Parametry

key: string

Klucz, którego wartość chcesz uzyskiwać.


Zwroty

Variant

Wartość, lub zero jeśli klucz nie istnieje.

Przykłady kodu

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
Wynik

Zwraca obiekt MemoryStoreHashMapPages dla zapisu poprzez pozycje w mapie haszowej. Zakres poprawny jest 1 do 200 włącznie.

Parametry

count: number

Maksymalna liczba możliwych przedmiotów, które można zwrócić.


Zwroty

Instancja MemoryStoreHashMapPages, która열istuje pojedyncze pozycje jako MemoryStoreHashMapPages instancje.

Przykłady kodu

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
Wynik

Usunie jeden z pozycji z mapy haszowania.

Parametry

key: string

Klucz do usuwać, wyjmować.


Zwroty

void

Przykłady kodu

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

Wynik

Ustawia wartość klucza w mapie hachowania, a następnie zapisuje wszystkie istniejące wartości.

Parametry

key: string

Klucz, którego wartość można ustawiać.

value: Variant

Wartość do ustawiać.

expiration: number

Przerwa przedmiotu w sekundach, po której przedmiot jest automatycznie usuwany z mapy haszowania. Maksymalny czas przeważania wynosi 45 dni (3,888,000 sekund).


Zwroty

Przykłady kodu

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
Wynik

Odzupełnia wartość klucza z mapy haszowej i umożliwia aktualizację go do nowej wartości.

Ten metodowy akceptuje funkcję zwrotu, która odszukuje istniejącą wartość klucza i przekaże ją do funkcji transformacji, która zwraca nową wartość dla przedmiot, z tymi wyjątkami:

  • Jeśli klucz nie istnieje, stary wartości przekazany funkcji jest nil.
  • Jeśli funkcja zwraca nil, aktualizacja jest anulowana.

Nowa wartość jest zapisywana tylko wtedy, gdy klucz nie został zaktualizowany (na przykład przez inny serwer gry), ponieważ wtedy została przeczytane. Jeśli wartość się zmieniła w tym czasie, funkcja transformacji zostanie ponownie wywołana z najnowszą wartością przedmiotu. Ten cykl powtarza się, aż wartość zostanie zapisana pomyślnie lub funkcja transformacji zwraca nil, aby anulować operację.

Parametry

key: string

Klucz, którego wartość chcesz aktualizacja.

transformFunction: function

Funkcja transformacji, którą zapewniać. Ta funkcja odbiera stary wartość jako wejście i wypisuje nową wartość.

expiration: number

Przerwa przedmiotu w sekundach, po której przedmiot jest automatycznie usuwany z mapy haszowania. Maksymalny czas przeważania wynosi 45 dni (3,888,000 sekund).


Zwroty

Variant

Ostatnia wartość zwrócona przez funkcję transformacji.

Przykłady kodu

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)

Zdarzenia