MemoryStoreHashMap
*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.
Zapewnia dostęp do mapy haszy w ciągu MemoryStoreService .Mapa haszu to kolekcja przedmiotów, w których klucze ciągów są powiązane z losowymi wartościami (do maksymalnego dozwolonego rozmiaru -- patrz Magazyny pamięci).Klucze nie mają gwarancji kolejności.
Podsumowanie
Metody
Zwraca wartość klucza w mapie haszu.
Zwraca obiekt MemoryStoreHashMapPages do liczenia przez przedmioty w mapie haszu.
Usuwa przedmiot z mapy haszu.
Ustawia wartość klucza w mapie haszu.
Odzyskuje wartość klucza z mapy haszy i pozwala na aktualizację do nowej wartości.
Właściwości
Metody
GetAsync
Zwraca wartość klucza w mapie haszu.
Parametry
Klucz, którego wartość chcesz uzyskiwać.
Zwroty
Wartość lub nil, jeśli klucz nie istnieje.
Przykłady kodu
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
Zwraca obiekt MemoryStoreHashMapPages do wyszukiwania przez przedmioty w mapie haszu. Prawidłowy zakres wynosi od 1 do 200 włącznie.
Parametry
Maksymalna możliwa liczba przedmiotów, które można zwrócić.
Zwroty
Instancja MemoryStoreHashMapPages, która wymienia przedmioty jako MemoryStoreHashMapPages instancje.
Przykłady kodu
Kod poniżej wymienia wszystkie przedmioty w mapie hasła pamięciowego.
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) -- Klucze mapy muszą być ciągami
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 }
-- Całkowicie dla celów rejestracji śledzimy, na jakiej stronie numeru jesteśmy
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
-- Strony zaliczkowe, jeśli jest więcej stron do przeczytania
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
-- Klucze dodane do mapy haszy są również dodawane do tabeli oczekiwanych przedmiotów.
-- Później przesłane przedmioty mapy zostaną porównane z tą tabelą oczekiwanych przedmiotów.
local expectedItems = populateHashMap(testHashMap, NUM_TEST_ITEMS)
-- Otrzymywanie stron może się pomylić. W tym przypadku pozwolimy na błąd i zatrzymamy wykonanie programu,
-- ale możesz chcieć go zadzwonić i obsługiwać inaczej.
print(`Getting HashMap pages with ListItemsAsync...`)
local pages = testHashMap:ListItemsAsync(NUM_TEST_ITEMS)
local retrievedItems = getItemsFromAllPages(pages)
local numMatchingItems = compareAllItems(retrievedItems, expectedItems)
-- Jeśli nie wystąpiły błędy w ustawianiu lub uzyskiwaniu przedmiotów, wszystkie przedmioty powinny pasować.
print(`Program complete. {numMatchingItems}/{NUM_TEST_ITEMS} retrieved items matched the expected values.`)
RemoveAsync
Usuwa przedmiot z mapy haszu.
Parametry
Klucz do usuwać, wyjmować.
Zwroty
Przykłady kodu
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
Ustawia wartość klucza w mapie haszu, zastępując istniejącą wartość.
Parametry
Klucz, którego wartość należy ustawiać.
Wartość do ustawiać.
Wygasanie przedmiotu w sekundach, po których przedmiot zostanie automatycznie usunięty z mapy haszuMaksymalny czas wygaśnięcia wynosi 45 dni (3 888 000 sekund).
Zwroty
Przykłady kodu
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
Odzyskuje wartość klucza z mapy haszy i pozwala na aktualizację do nowej wartości.
Ta metoda akceptuje funkcję powrotną, która odzyskuje istniejącą wartość klucza i przekazuje ją funkcji transformacji, która zwraca nową wartość dla przedmiotu, z tymi wyjątkami:
- Jeśli klucz nie istnieje, stary wartość przekazany do 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 gier) od chwili, gdy został przeczytane.Jeśli wartość zmieniła się w tym czasie, funkcja transformacji jest ponownie wywoływana z najnowszą wartością elementu.Ten cykl powtarza się do czasu, aż wartość zostanie zapisana pomyślnie lub funkcja transformacji zwróci nil , aby anulować operację.
Parametry
Klucz, którego wartość chcesz aktualizacja.
Funkcja transformacji, którą zapewniać. Ta funkcja przyjmuje stary wartość jako wejście i zwraca nową wartość.
Wygasanie przedmiotu w sekundach, po których przedmiot zostanie automatycznie usunięty z mapy haszuMaksymalny czas wygaśnięcia wynosi 45 dni (3 888 000 sekund).
Zwroty
Ostatnia wartość zwrócona przez funkcję transformacji.
Przykłady kodu
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)