MemoryStoreQueue

Visualizza obsoleti

*Questo contenuto è tradotto usando AI (Beta) e potrebbe contenere errori. Per visualizzare questa pagina in inglese, clicca qui.

Non costruibile
Non Replicato

Fornisce l'accesso a una coda all'interno di MemoryStore.Una coda è una struttura di dati che fornisce uno storage temporaneo per oggetti arbitrari (fino alla dimensione massima dell'oggetto -- vedi Limitazioni di MemoryStore).Ogni elemento della coda ha una priorità numerica: MemoryStore recupera prima gli elementi con priorità più alta dalla coda, e recupera gli elementi con la stessa priorità in ordine di aggiunta.

Gli elementi in coda possono essere opzionalmente impostati per scadere dopo un certo periodo di tempo.Gli elementi scaduti scompaiono semplicemente dalla coda come se non fossero mai stati aggiunti.

Sommario

Metodi

Proprietà

Metodi

AddAsync

()
Resa

Aggiunge un oggetto alla coda.

Parametri

value: Variant

Il valore dell'elemento da aggiungere alla coda.

Valore predefinito: ""
expiration: number

Tempo di scadenza dell'elemento, in secondi, dopo il quale l'elemento verrà automaticamente rimosso dalla coda.

Valore predefinito: ""
priority: number

Priorità dell'elemento. Gli elementi con priorità più alta vengono recuperati dalla coda prima degli elementi con priorità più bassa.

Valore predefinito: 0

Restituzioni

()

ReadAsync

Resa

Legge uno o più elementi dalla coda come un'unica operazione atomica.

Questo metodo non elimina automaticamente gli elementi restituiti dalla coda ma li rende invisibili ad altre chiamate ReadAsync per il periodo del timeout dell'invisibilità.Gli elementi devono essere rimossi esplicitamente dalla coda con MemoryStoreQueue:RemoveAsync() prima che scada il tempo limite dell'invisibilità.L'invio del timeout dell'invisibilità predefinisce 30 secondi a meno che un valore diverso non sia stato fornito in MemoryStoreService:GetQueue() .

Parametri

count: number

Numero di elementi da leggere. Il valore massimo consentito di questo parametro è 100.

Valore predefinito: ""
allOrNothing: boolean

Controlla il comportamento del metodo nel caso in cui la coda abbia meno di count oggetti: se impostato su false, il metodo restituisce tutti gli oggetti disponibili; se impostato su true, non restituisce oggetti.Il valore predefinito è falso.

Valore predefinito: false
waitTimeout: number

La durata, in secondi, per la quale il metodo attenderà se il numero richiesto di oggetti non è immediatamente disponibile nella coda.Le letture vengono tentate ogni due secondi durante questo periodo.Questo parametro può essere impostato a zero per indicare nessuna attesa.Se questo parametro non viene fornito o impostato su -1, il metodo attenderà indefinitamente.

Valore predefinito: -1

Restituzioni

Un tuple di due elementi.Il primo elemento è un array di valori di oggetto letti dalla coda.Il secondo elemento è un identificatore di stringa che deve essere passato a MemoryStoreQueue:RemoveAsync() per rimuovere definitivamente questi elementi dalla coda.

Campioni di codice

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

()
Resa

Rimuove un oggetto o oggetti precedentemente letti dalla coda.Questo metodo utilizza l'identificatore restituito da MemoryStoreQueue:ReadAsync() per identificare gli elementi da Rimuovere.Se chiamato dopo che il tempo limite dell'invisibilità è scaduto, la chiamata non ha alcun effetto.

Parametri

id: string

Identifica gli elementi da Eliminare. Usa il valore restituito da MemoryStoreQueue:ReadAsync() .

Valore predefinito: ""

Restituzioni

()

Campioni di codice

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

Eventi