Speicher-Store-Hash-Karte

*Dieser Inhalt wurde mit KI (Beta) übersetzt und kann Fehler enthalten. Um diese Seite auf Englisch zu sehen, klicke hier.

Hash-Karten , ähnlich wie sortierte Karten, ermöglichen es Ihnen, In-Memory-Daten als Schlüsselwertpaare zu speichern. Im Gegensatz zu sortierten Karten behalten sie keine Ordnungsgarantien. Diese Datenstruktur ist nützlich für Fälle, die einfache Daten-Cache und einen schnellen Zugriff erfordern, wie z. B. geteilte Inventare

Beschränkungen

Hash-Karten haben ein Zeichenlimit von 128 Zeichen und ein Wertlimit von 32 KB.

Andernfalls verwenden Hashes Karten die gleichen API-Anfrage und Speicherquellen-Limit wie andere Erinnerungsstores-Datenstrukturen.

Erhalte eine Hashes-Karte

Um eine Hashen-Map zu erhalten, rufen Sie Class.MemoryStoreService:Get:`Class.MemoryStoreService:Get:` mit einem Namen für die Hashen-Map auf. Der Name ist global innerhalb der Erlebnis, sodass Sie auf jedem Skript, das diesen Namen verwendet, auf die gleiche Hashen-Map zugreifen können.

Erhalte eine Hashes-Karte

local MemoryStoreService = game:GetService("MemoryStoreService")
local hashMap = MemoryStoreService:GetHashMap("HashMap1")

Nachdem du eine Hashes-Map erhalten hast, rufe eine der folgenden Funktionen auf, um Daten in ihr zu lesen oder zu schreiben:

FunktionAktion
MemoryStoreHashMap:SetAsync()Füge einen neuen Schlüssel hinzu oder überschreiben Sie den Wert, wenn der Schlüssel bereits existiert.
MemoryStoreHashMap:GetAsync()Lesen Sie einen bestimmten Schlüssel.
MemoryStoreHashMap:ListItemsAsync()Liste Gegenstände in einer Hashen-Karte.
MemoryStoreHashMap:UpdateAsync()Aktualisieren der Wert eines Schlüssels nach dem Abrufen einer HasMap.
MemoryStoreHashMap:RemoveAsync()Entferne einen Schlüssel von der Hashen-Karte.

Daten hinzufügen oder überschreiben

Um einen neuen Schlüssel hinzuzufügen oder den Wert eines Schlüssels in der Hashen-Karte zu überschreiben, rufen Sie MemoryStoreHashMap:SetAsync() mit dem Schlüsslenamen, seinem Wert und einer Verfallszeit in Sekunden. Der Speicher automatisch reinigt sich, wenn der Schlüssel abläuft. Die maximale Verfallszeit beträgt 3,888,0

Daten zu einer Hashes-Map hinzufügen

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

Daten erhalten

Du kannst entweder einen Wert mit einem bestimmten Schlüssel zuordnen oder mehrere Schlüssel-Werte-Pairs in der Hashen-Karte erhalten.

Ermittle Daten mit einem Schlüssel

Um einen Wert, der einer Schlüssel auf derHash-Map zugewiesen ist, mit einem Class.MemoryStoreOperations:GetAsync() -Call mit dem Schlüssel Name zu erhalten, zu erhalten, benutzt Class.MemoryStore.

Einen bestimmten Schlüssel aus einer HasMap erhalten

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

Daten mit mehreren Schlüsselwerten erhalten

Um alle Key-Value-Pairs von der Hash-Map als einzelne Operation zu erhalten, rufen Sie MemoryStoreHashMap:ListItemsAsync() mit der gewünschten Seitengröße auf. Diese Funktion listet alle bestehenden Schlüssel in einer pagierten Weise auf. Zum Beispiel ruft die folgende Codebeispiel-Sammlung bis zu 32 Elemente von der Hash-Map abrufen.

Gegenstände in einer Hashes-Karte aufzulisten

local MemoryStoreService = game:GetService("MemoryStoreService")
local hashMap = MemoryStoreService:GetHashMap("HashMap1")
-- Erhalte die Liste der Elemente, 32 Elemente pro Zeit
local success, pages = pcall(function()
return hashMap:ListItemsAsync(32)
end)
if success then
while true do
-- Erhalte die aktuelle Seite
local entries = pages:GetCurrentPage()
-- Durchlaufen Sie alle Schlüsselwertpaare auf der Seite
for _, entry in ipairs(entries) do
print(entry.key .. " : " .. tostring(entry.value))
end
-- Überprüfen, ob die letzte Seite erreicht wurde
if pages.IsFinished then
break
else
print("----------")
-- Weiter zu nächster Seite
pages:AdvanceToNextPageAsync()
end
end
end

Daten aktualisieren

Um den Wert eines Schlüssels aus einer Hashest-Karte zu erlangen und ihn zu aktualisieren, rufen Sie Class.MemoryStore:`UpdateAsync() ` mit dem Schlüssel name , einer Rückruf-Funktion zum Aktualisieren des Schlüssels und einer 1> Verfallszeit1> in Sekunden.

Für die meisten Erfahrungen können mehrere Server die gleiche Schlüssel gleichzeitig aktualisieren und den Wert ändern. Als UpdateAsync() immer den neuesten Wert vor dem Update modifiziert, solltest du ihn verwenden, um den neuesten Wert als Eingabe für deine Rückruf-Funktion zu lesen.

Zum Beispiel aktualisiert der folgende Codebeispiel die Ressourcenanzahl einer Ressource in einem gemeinsamen Inventar. UpdateAsync() stellen sicher, dass alle Beitragsleistungen in dieses gemeinsame Inventar übergehen, auch wenn diese Beitragsleistungen gleichzeitig erstellt werden. In dieser Funktion wird auch eine maximale Ressourcenanzahl von 500 eingezogen.

Ressourcen-Count für ein Ressource in einem geteilten Inventar aktualisieren

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
-- stellen sie sicher, dass wir die maximale anzahl an ressourcen nicht überschreiten
if resource.count > 500 then
resource.count = 500
end
return resource
end, 1200)
end)
if success then
print(newResourceCount)
end
end

Die Latenz für UpdateAsync() ist ähnlich zu GetAsync() und SetAsync() , es sei denn, es gibt eine Behauptung.

Wenn Eind?mmung auftritt, versucht das System automatisch erneut, bis eines dieser drei geschehen ist: die Operation erfolgreich ist, die Rückruf-Funktion nil ?ffnet oder die maximale Anzahl an Wiederholungen erreicht ist. Wenn das System die maximale Anzahl an Wiederholungen erreicht, gibt es einen Konflikt zurück.

Daten entfernen

Du kannst MemoryStoreHashMap:RemoveAsync() für beide verwenden, um einen Key aus der Hashen-Karte zu entfernen und alle Daten in einer Memoire-Store-Hashen-Karte zu löschen.

Den Key entfernen

Um einen Schlüssel von derHash-Map zu entfernen, rufen Sie MemoryStoreHashMap:RemoveAsync() mit einem Schlüssel name .

Entferne einen Schlüssel aus einer HasMap

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

Alle Daten löschen

Um alle Daten in einer Hashen-Karte zu löschen, listen Sie alle Ihre Gegenstände mit MemoryStoreHashMap:ListItemsAsync() und entfernen Sie sie dann mit MemoryStoreHashMap:RemoveAsync() .

Alle Daten in einer Hash-Karte löschen

local MemoryStoreService = game:GetService("MemoryStoreService")
local hashMap = MemoryStoreService:GetHashMap("HashMap1")
-- Erhalte die Liste der Elemente, 32 Elemente pro Zeit
local success, pages = pcall(function()
return hashMap:ListItemsAsync(32)
end)
if success then
while true do
-- Erhalte die aktuelle Seite
local entries = pages:GetCurrentPage()
local removeSuccess = true
local removeError = nil
-- Durchlaufen Sie alle Schlüsselwertpaare auf der Seite
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
-- Überprüfen, ob die letzte Seite erreicht wurde
if pages.IsFinished then
print("Finished deleting all data.")
break
else
print("----------")
-- Weiter zu nächster Seite
pages:AdvanceToNextPageAsync()
end
end
end