MemoryStoreHashMap

Veraltete anzeigen

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

Nicht erstellbar
Nicht repliziert

Bietet Zugriff auf eine Hash-Karte innerhalb von MemoryStoreService .Eine Hash-Karte ist eine Sammlung von Elementen, bei denen Zeichenketten mit zufälligen Werten verbunden sind (bis zur maximalen zulässigen Größe -- siehe Speicherstände).Die Schlüssel haben keine Ordnungsgarantien.

Zusammenfassung

Methoden

Eigenschaften

Methoden

GetAsync

Variant
Angehalten

Ruft den Wert eines Schlüssels in der Hash-Karte ab.

Parameter

key: string

Der Schlüssel, dessen Wert du abrufen möchtest.

Standardwert: ""

Rückgaben

Variant

Der Wert oder nil, wenn der Schlüssel nicht existiert.

Code-Beispiele

Getting data from a MemoryStore Hash Map

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
Angehalten

Gibt ein MemoryStoreHashMapPages Objekt für die Enumeration durch Elemente in der Hash-Karte zurück. Die gültige Reichweite beträgt 1 bis 200 inclusive.

Parameter

count: number

Maximale mögliche Anzahl von Artikeln, die zurückgegeben werden können.

Standardwert: ""

Rückgaben

Code-Beispiele

The code below lists all the items in a Memory Store Hash Map.

Listing items in a MemoryStore Hash Map

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

()
Angehalten

Entfernt ein Element aus der Hash-Karte.

Parameter

key: string

Der Schlüssel zum entfernen.

Standardwert: ""

Rückgaben

()

Code-Beispiele

Removing data from a MemoryStore Hash Map

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

Angehalten

Setzt den Wert eines Schlüssels in der Hash-Karte, überschreibt jeden vorhandenen Wert.

Parameter

key: string

Der Schlüssel, dessen Wert festlegenwerden muss.

Standardwert: ""
value: Variant

Der Wert, der festlegenwerden soll.

Standardwert: ""
expiration: number

Artikel läuft in Sekunden ab, nachdem der Artikel automatisch aus der Hash-Karte entfernt wird.Die maximale Verfallszeit beträgt 45 Tage (3.888.000 Sekunden).

Standardwert: ""

Rückgaben

Code-Beispiele

Adding data to a MemoryStore Hash Map

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

Variant
Angehalten

Ruft den Wert eines Schlüssels aus einer Hash-Karte ab und lässt ihn auf einen neuen Wert aktualisieren.

Diese Methode akzeptiert eine Rückruffunktion, die den bestehenden Schlüsselwert abruft und ihn an eine Transformierungsfunktion weitergibt, die den neuen Wert für das Artikelzurückgibt, mit diesen Ausnahmen:

  • Wenn der Schlüssel nicht existiert, ist der alte Wert, der an die Funktion übergeben wurde, nil .
  • Wenn die Funktion nil zurückgibt, wird die Aktualisierung abgebrochen.

Der neue Wert wird nur gespeichert, wenn der Schlüssel nicht aktualisiert wurde (zum Beispiel durch einen anderen Server), seit dem Moment, in dem er gelesen wurde.Wenn sich der Wert in dieser Zeit ändert, wird die Transformfunktion erneut mit dem aktuellsten Artikelwert aufgerufen.Dieser Zyklus wiederholt sich, bis der Wert erfolgreich gespeichert wird oder die Transformfunktion nil zur Abbruch der Operation zurückgibt.

Parameter

key: string

Der Schlüssel, dessen Wert du Updatemöchtest.

Standardwert: ""
transformFunction: function

Die Transformfunktion, die du angeben. Diese Funktion nimmt den alten Wert als Eingabe und gibt den neuen Wert zurück.

Standardwert: ""
expiration: number

Artikel läuft in Sekunden ab, nachdem der Artikel automatisch aus der Hash-Karte entfernt wird.Die maximale Verfallszeit beträgt 45 Tage (3.888.000 Sekunden).

Standardwert: ""

Rückgaben

Variant

Der letzte Wert, der von der Transformfunktion zurückgegeben wurde.

Code-Beispiele

This sample updates the count of some resource in a shared inventory. The use of MemoryStoreHashMap:UpdateAsync() ensures that all player contributions make their way into this shared inventory, even if the contributions occur simultaneously. The function enforces a max resource count of 500.

Updating a Memory Store Hash Map

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)

Ereignisse