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:
Funktion | Aktion |
---|---|
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