MemoryStoreQueue

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 Warteschlange innerhalb von MemoryStore.Eine Warteschlange ist eine Datenstruktur, die vorübergehende Speicherung für beliebige Elemente bietet (bis zur maximalen Elementgröße -- siehe MemoryStore-Grenzen ).Jedes Queue-Element hat eine numerische Priorität: MemoryStore holt zuerst Elemente mit höherer Priorität aus der Warteschlange und holt dann Elemente mit derselben Priorität in der Reihenfolge der Hinzufügung ab.

Artikel in der Warteschlange können optional so eingestellt werden, dass sie nach einer bestimmten Zeit ablaufen.Abgelaufene Elemente verschwinden einfach aus der Warteschlange, als wären sie nie hinzugefügt worden.

Zusammenfassung

Methoden

  • AddAsync(value : Variant,expiration : number,priority : number):()
    Angehalten

    Fügt einem Element in die Warteschlange hinzu.

  • ReadAsync(count : number,allOrNothing : boolean,waitTimeout : number):Tuple
    Angehalten

    Lesen Sie einen oder mehrere Artikel aus der Warteschlange.

  • Angehalten

    Entfernt einen Artikel oder Artikel, die zuvor aus der Warteschlange gelesen wurden.

Eigenschaften

Methoden

AddAsync

()
Angehalten

Fügt einem Element in die Warteschlange hinzu.

Parameter

value: Variant

Der Wert des Elements, das zur Warteschlange hinzugefügt werden soll.

Standardwert: ""
expiration: number

Verfallszeit des Artikels, in Sekunden, nachdem der Artikel automatisch aus der Warteschlange entfernt wird.

Standardwert: ""
priority: number

Artikelpriorität. Artikel mit höherer Priorität werden aus der Warteschlange vor Artikeln mit niedrigerer Priorität abgerufen.

Standardwert: 0

Rückgaben

()

ReadAsync

Angehalten

Liest ein oder mehrere Elemente aus der Warteschlange als einzelne atomare Operation.

Diese Methode löscht die zurückgegebenen Elemente nicht automatisch aus der Warteschlange, sondern macht sie für die Dauer des Unsichtbarkeitszeitlimits unsichtbar für andere Leserückrufe.Die Elemente müssen explizit aus der Warteschlange mit MemoryStoreQueue:RemoveAsync() entfernt werden, bevor der Unsichtbarkeitszeitlimit abläuft.Die Unsichtbarkeits-Timeout-Werte betragen standardmäßig 30 Sekunden, es sei denn, ein anderer Wert wurde in MemoryStoreService:GetQueue() bereitgestellt.

Parameter

count: number

Anzahl der zu gelesenArtikel. Der maximale zulässige Wert dieses Parameters beträgt 100.

Standardwert: ""
allOrNothing: boolean

Steuert das Verhalten der Methode im Fall, dass die Warteschlange weniger als count Artikel hat: Wenn auf false gesetzt, gibt die Methode alle verfügbaren Artikel zurück; wenn auf true gesetzt, gibt sie keine Artikel zurück.Der Standardwert ist falsch.

Standardwert: false
waitTimeout: number

Die Dauer, in Sekunden, für die die Methode warten wird, wenn die erforderliche Anzahl von Artikeln nicht sofort in der Warteschlange verfügbar ist.Lesungen werden während dieser Periode alle zwei Sekunden versucht.Dieser Parameter kann auf Null gesetzt werden, um keine Wartezeit anzugeben.Wenn dieser Parameter nicht bereitgestellt oder auf -1 gesetzt wird, wartet die Methode unbestimmte Zeit.

Standardwert: -1

Rückgaben

Eine Tuplizität von zwei Elementen.Das erste Element ist eine Liste von Artikelwerten, die aus der Warteschlange gelesen wurden.Das zweite Element ist eine Zeichenfolge-Identifikator, die an MemoryStoreQueue:RemoveAsync() übergeben werden sollte, um diese Elemente dauerhaft aus der Warteschlange zu entfernen.

Code-Beispiele

The following code sample demonstrates using MemoryStoreQueue:ReadAsync() and MemoryStoreQueue:RemoveAsync() to reliably read, process, and remove items from a queue. Though this process can be as complicated as necessary, this example simply sets a flag in the corresponding data store item, which guarantees that every item will eventually be processed even if some of the calls encounter errors or the server crashes:

Depending on where the failure happens, it's possible that an item will be processed more than once. You should account for that like the following code sample, in which the end result is the same even if DataStoreService:UpdateAsync() is invoked multiple times.

Using a MemoryStoreQueue

local MemoryStoreService = game:GetService("MemoryStoreService")
local DataStoreService = game:GetService("DataStoreService")
local queue = MemoryStoreService:GetQueue("PlayerQueue")
local dataStore = DataStoreService:GetDataStore("PlayerStore")
while true do
pcall(function()
-- wait for an item to process
local items, id = queue:ReadAsync(1, false, 30)
-- check if an item was retrieved
if #items > 0 then
-- mark the item as processed
dataStore:UpdateAsync(items[0], function(data)
data = data or {}
data.processed = 1
return data
end)
-- remove the item from the queue
queue:RemoveAsync(id)
end
end)
end

RemoveAsync

()
Angehalten

Entfernt einen Artikel oder Artikel, die zuvor aus der Warteschlange gelesen wurden.Diese Methode verwendet den Identifikator, der von MemoryStoreQueue:ReadAsync() zurückgegeben wird, um die zu entfernenden Elemente zu identifizieren.Wenn nach Ablauf der Unsichtbarkeitszeit ausgerufen wird, hat der Anruf keine Auswirkung.

Parameter

id: string

Identifiziert die zu löschenden Elemente. Verwende den Wert, der von MemoryStoreQueue:ReadAsync() zurückgegeben wird.

Standardwert: ""

Rückgaben

()

Code-Beispiele

The following code sample demonstrates using MemoryStoreQueue:ReadAsync() and MemoryStoreQueue:RemoveAsync() to reliably read, process, and remove items from a queue. Though this process can be as complicated as necessary, this example simply sets a flag in the corresponding data store item, which guarantees that every item will eventually be processed even if some of the calls encounter errors or the server crashes:

Depending on where the failure happens, it's possible that an item will be processed more than once. You should account for that like the following code sample, in which the end result is the same even if DataStoreService:UpdateAsync() is invoked multiple times.

Using a MemoryStoreQueue

local MemoryStoreService = game:GetService("MemoryStoreService")
local DataStoreService = game:GetService("DataStoreService")
local queue = MemoryStoreService:GetQueue("PlayerQueue")
local dataStore = DataStoreService:GetDataStore("PlayerStore")
while true do
pcall(function()
-- wait for an item to process
local items, id = queue:ReadAsync(1, false, 30)
-- check if an item was retrieved
if #items > 0 then
-- mark the item as processed
dataStore:UpdateAsync(items[0], function(data)
data = data or {}
data.processed = 1
return data
end)
-- remove the item from the queue
queue:RemoveAsync(id)
end
end)
end

Ereignisse