Mapa sieci przypisania pamięci

*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.

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:

FunkcjaAkcja
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