MemoryStoreHashMap
*Dieser Inhalt wurde mit KI (Beta) übersetzt und kann Fehler enthalten. Um diese Seite auf Englisch zu sehen, klicke hier.
Bietet Zugriff auf eine HasMap innerhalb von MemoryStoreService. Eine HasMap ist eine Sammlung von Elementen, in der Stringschlüssel mit beliebigen Werten (bis zum maximalen erlaubten Size -- siehe Speicherstores ) verbunden sind. Die Schlüssel haben keine Sortiergarantien.
Zusammenfassung
Methoden
Besetzt den Wert eines Schlüssels in der Hashen-Karte.
Return a MemoryStoreHashMapPages object for enumerating through items in the hash map.
Entfernt einen Gegenstand von der Hashen-Karte.
Setzt den Wert eines Schlüssels in der Hashen-Karte.
Rufe den Wert eines Schlüssels aus einer HasMap ab und lass ihn zu einem neuen Wert aktualisieren.
Eigenschaften
Methoden
GetAsync
Besetzt den Wert eines Schlüssels in der Hashen-Karte.
Parameter
Der Schlüssel, dessen Wert du abrufenmöchtest.
Rückgaben
Der Wert, oder null, wenn der Schlüssel nicht existiert.
Code-Beispiele
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
Gibt ein MemoryStoreHashMapPages Objekt zurück, um durch Elemente in der Hashen-Karte zu nummerieren. Die gültige Reichweite beträgt 1 bis 200, einschließlich.
Parameter
Maximum mögliche Anzahl von Gegenständen, die zurückgegeben werden können.
Rückgaben
Eine MemoryStoreHashMapPages Instanz, die die Elemente als MemoryStoreHashMapPages Instanzen listet.
Code-Beispiele
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) -- HashMap keys must be strings
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 }
-- Purely for logging purposes, we track what page number we're on
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
-- Advance pages if there are more pages to read
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
-- Keys added to the hashmap are also added to this expectedItems table.
-- Later, the retrieved hashmap items will be compared against this table of expected items.
local expectedItems = populateHashMap(testHashMap, NUM_TEST_ITEMS)
-- Getting pages can error. In this case, we will let it error and stop program execution,
-- but you may want to pcall it and handle it differently.
print(`Getting HashMap pages with ListItemsAsync...`)
local pages = testHashMap:ListItemsAsync(NUM_TEST_ITEMS)
local retrievedItems = getItemsFromAllPages(pages)
local numMatchingItems = compareAllItems(retrievedItems, expectedItems)
-- If there were no errors setting or getting items, all items should match.
print(`Program complete. {numMatchingItems}/{NUM_TEST_ITEMS} retrieved items matched the expected values.`)
RemoveAsync
Entfernt einen Gegenstand von der Hashen-Karte.
Parameter
Der Schlüssel zum entfernen.
Rückgaben
Code-Beispiele
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
Setzt den Wert eines Schlüssels in der Hashen-Karte, überschreibt den bestehenden Wert.
Parameter
Der Schlüssel, dessen Wert zum festlegen.
Der Wert, der festlegenwird.
Gegenstand-Expiration in Sekunden, nach der der Gegenstand automatisch aus der Hashen-Karte entfernt wird. Die maximale Expiry-Zeit beträgt 45 Tage (3.888.000 Sekunden).
Rückgaben
Code-Beispiele
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
Rufe den Wert eines Schlüssels aus einer HasMap ab und lass ihn zu einem neuen Wert aktualisieren.
Diese Methode akzeptiert eine Rückruf-Funktion, die den bestehenden Schlüsselwert abruft und ihn an eine Transform-Funktion weitergibt, die den neuen Wert für das Artikelzurückgibt, mit diesen Ausnahmen:
- Wenn der Schlüssel nicht existiert, ist der alte Wert, der dem Funktionsbereich übergeben wurde, null.
- Wenn die Funktion null zurückgibt, wird das Update abgebrochen.
Der neue Wert wird nur gespeichert, wenn der Schlüssel nicht aktualisiert wurde (z. B. durch einen anderen Server), seitdem der Wert gelesen wurde. Wenn der Wert in dieser Zeit geändert wurde, ruft die Transform-Funktion erneut mit dem neuesten Item-Wert auf. Dieser Zyklus wiederholt sich, bis der Wert erfolgreich gespeichert wird oder die Transform-Funktion nil zurückruft, um die Operation abzubrechen.
Parameter
Der Schlüssel, dessen Wert Sie Updatemöchten.
Die Transform-Funktion, die Sie angeben. Diese Funktion nimmt den alten Wert als Eingabe und gibt den neuen Wert zurück.
Gegenstand-Expiration in Sekunden, nach der der Gegenstand automatisch aus der Hashen-Karte entfernt wird. Die maximale Expiry-Zeit beträgt 45 Tage (3.888.000 Sekunden).
Rückgaben
Der letzte Wert, der von der Transform-Funktion zurückgegeben wird.
Code-Beispiele
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)