Mapy haszowe , podobne do sortowanych map, pozwalają na przechowywanie wartości kluczowych jako pary. W przeciwieństwie do sortowanych map nie gwarantują one gwarancji sortowania. Ta struktura danych jest użyteczna w przypadkach, w których wymagana jest prosta dostępność i szybki dostęp, takich jak współdzielone prze
Ograniczenia
Mapy haszowe mają limit rozmiaru klucza 128 znaków i limit rozmiaru wartości 32 KB.
W przeciwnym razie, haszowanie map używa tych samych API Request i memory quota limitów jak inne struktury danych magazynu pamięci.
Zdobywanie mapy haszowanej
Aby uzyskać mapę hasz, wezwij MemoryStoreService:GetHashMap() z imieniem dla mapy hasz. Imię jest globalne w doświadczeniu, więc możesz uzyskać dostęp do tej samej mapy hasz na każdym skrypcie używając tego imienia.
Zdobywanie mapy haszowanej
local MemoryStoreService = game:GetService("MemoryStoreService")local hashMap = MemoryStoreService:GetHashMap("HashMap1")
Po uzyskaniu mapy haszowanej wezwij dowolną z następujących funkcji, aby czytać lub zapisać w niej dane:
Funkcja | Akcja |
---|---|
MemoryStoreHashMap:SetAsync() | Dodaj nowy klucz lub zapisz wartość, jeśli klucz już istnieje. |
MemoryStoreHashMap:GetAsync() | Przeczytaj określony klucz. |
MemoryStoreHashMap:ListItemsAsync() | Lista pozycji w mapie haszowanej. |
MemoryStoreHashMap:UpdateAsync() | Aktualizuj wartość klucza po odzyskaniu go z mapy hasz. |
MemoryStoreHashMap:RemoveAsync() | Usuń klucz z mapy hash |
Dodawanie lub Zastępowanie Danych
Aby dodać nowy klucz lub zmienić wartość klucza w mapie hash, wezwij MemoryStoreHashMap:SetAsync() z imieniem klucza, jego wartością i terminem ważności w sekundach. Pamięć automatycznie się czyszczy, gdy klucz ekslurowany. Maksymalny czas ekslurowania wynosi 3,888,0
Dodawanie danych do mapy hash
local MemoryStoreService = game:GetService("MemoryStoreService")
local hashMap = MemoryStoreService:GetHashMap("HashMap1")
local setSuccess, _ = pcall(function()
return hashMap:SetAsync("User_1234", 1000, 30)
end)
if setSuccess then
print("Set succeeded.")
end
Otrzymywanie danych
Możesz uzyskać wartość związaną z określonym kluczem lub uzyskać wiele pary kluczowych wartości w mapie haszowania.
Zdobywanie danych za jeden klucz
Aby uzyskać wartość związaną z jednym kluczem z mapy haszowej, wezwij MemoryStoreHashMap:GetAsync() z kluczem imienia.
Zdobycie szczególnego klucza z mapy hash
local MemoryStoreService = game:GetService("MemoryStoreService")
local hashMap = MemoryStoreService:GetHashMap("HashMap1")
local setSuccess, _ = pcall(function()
return hashMap:SetAsync("User_1234", 1000, 30)
end)
if setSuccess then
print("Set succeeded.")
end
local item
local getSuccess, getError = pcall(function()
item = hashMap:GetAsync("User_1234")
end)
if getSuccess then
print(item)
else
warn(getError)
end
Otrzymywanie danych z wieloma parami kluczowych
Aby uzyskać wszystkie pary wartości kluczowych z mapy hash jako jedną operację, wezwij MemoryStoreHashMap:ListItemsAsync() z pożądaną wielkością strony. Ta funkcja wymienia wszystkie istniejące klucze w sposób pagowany. Na przykład poniższy kod przykładowy odszukuje do 32 pozycji z mapy hash.
Listowanie pozycji w Mapie Haszy
local MemoryStoreService = game:GetService("MemoryStoreService")
local hashMap = MemoryStoreService:GetHashMap("HashMap1")
-- Zdobądź listę przedmiotów, 32 przedmioty na raz
local success, pages = pcall(function()
return hashMap:ListItemsAsync(32)
end)
if success then
while true do
-- Zdobądź bieżącą stronę
local entries = pages:GetCurrentPage()
-- Przeglądaj wszystkie pary kluczowych na stronie
for _, entry in ipairs(entries) do
print(entry.key .. " : " .. tostring(entry.value))
end
-- Sprawdź, czy ostatnia strona została osiągnięta
if pages.IsFinished then
break
else
print("------")
-- Przejdź do następnej strony
pages:AdvanceToNextPageAsync()
end
end
end
Aktualizowanie danych
Aby odzyskać wartość klucza z mapy hasz i aktualizować go, wezwij Class.MemoryStore:`UpdateAsync:` z kluczem imię , funkcją zwrotu do aktualizacji klucza i godzinę wygasa w sekundach.
Dla większości doświadczeń wiele serwerów może aktualizować ten sam klucz równocześnie i zmieniać wartość. Jako Class.MemoryStore:`Class.MemoryStore:`Class.MemoryStore:`Class.MemoryStore:`Class.MemoryStore aktualizuje zawsze najnowszą wartość przed aktualizacją, powinieneś używać go do czytania najnowszej wartości jako wejścia dla twojej funkcji zwrotnej.
Na przykład poniższy kod przykładowy aktualizuje liczbę zasobów zasobu w wspólnym wyposażenie. UpdateAsync() zapewnia, że wszystkie wkłady graczy znajdą się w tym wspólnym wyposażenie, nawet jeśli te wkłady są równocześnie wykonane. W tej funkcji weryfikuje również maksymalną liczbę zasobów 500.
Aktualizowanie liczby zasobów dla zasobu w wspólnym ekwipunku
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
-- upewnij się, że nie przekroczymy maksymalnej liczby zasobów
if resource.count > 500 then
resource.count = 500
end
return resource
end, 1200)
end)
if success then
print(newResourceCount)
end
end
Opóźnienie dla UpdateAsync() jest podobne do GetAsync() i SetAsync() chyba że istnieje kontener.
Gdy dojdzie do kontenerzenia, system automatycznie ponownie próbuje operacji, aż jedno z tych trzech się stanie: operacja zakończy się sukcesem, funkcja zwrotu wzwrotu zwraca nil lub osiągnięto maksymalną liczbę prób. Jeśli system osiągnie maksymalną liczbę prób, zwraca konflikt.
Usuwanie danych
Możesz użyć Class.MemoryStore:`usuń jeden klucz z mapy hachingu i usunąć wszystkie dane w hachingu mapy pamięci.
Usuwanie klucza
Aby usunąć klucz z mapy haszowej, wezwij MemoryStoreHashMap:RemoveAsync() z imieniem klucza nazwa .
Usuń klucz z mapy hash
local MemoryStoreService = game:GetService("MemoryStoreService")
local hashMap = MemoryStoreService:GetHashMap("HashMap1")
local setSuccess, _ = pcall(function()
return hashMap:SetAsync("User_1234", 1000, 30)
end)
if setSuccess then
print("Set succeeded.")
end
local removeSuccess, removeError = pcall(function()
hashMap:RemoveAsync("User_1234")
end)
if not removeSuccess then
warn(removeError)
end
Usuwanie wszystkich danych
Aby usunąć wszystkie dane w mapie hash, wymień wszystkie swoje przedmioty za pomocą MemoryStoreHashMap:ListItemsAsync() , a następnie usuń je za pomocą MemoryStoreHashMap:RemoveAsync() .
Usuń wszystkie dane w Mapie Hash
local MemoryStoreService = game:GetService("MemoryStoreService")
local hashMap = MemoryStoreService:GetHashMap("HashMap1")
-- Zdobądź listę przedmiotów, 32 przedmioty na raz
local success, pages = pcall(function()
return hashMap:ListItemsAsync(32)
end)
if success then
while true do
-- Zdobądź bieżącą stronę
local entries = pages:GetCurrentPage()
local removeSuccess = true
local removeError = nil
-- Przeglądaj wszystkie pary kluczowych na stronie
for _, entry in ipairs(entries) do
print(entry.key .. " : " .. tostring(entry.value))
removeSuccess, removeError = pcall(function()
hashMap:RemoveAsync(entry.key)
end)
if not removeSuccess then
warn(removeError)
end
end
-- Sprawdź, czy ostatnia strona została osiągnięta
if pages.IsFinished then
print("Finished deleting all data.")
break
else
print("------")
-- Przejdź do następnej strony
pages:AdvanceToNextPageAsync()
end
end
end