MemoryStoreQueue
*Questo contenuto è tradotto usando AI (Beta) e potrebbe contenere errori. Per visualizzare questa pagina in inglese, clicca qui.
Fornisce accesso a una coda all'interno di MemoryStore. Una coda è una struttura di dati che fornisce uno storage temporaneo per oggetti casuali (vedi Limiti di MemoryStore). Ogni oggetto della coda ha una priorità numerica: il MemoryStore recupera gli oggetti con una priorità più alta prima, e li recupera gli oggetti con la stessa priorità in ordine di aggiunta.
Gli elementi nella coda possono essere impostati opzionalmente per scadere dopo un certo periodo di tempo. Gli elementi scaduti semplicemente scompaiono dalla coda come se non fossero mai stati aggiunti.
Sommario
Proprietà
Metodi
Aggiunge un elemento alla coda.
Legge uno o più elementi dalla coda.
Rimuove un elemento o più elementi precedentemente letti dalla coda.
Proprietà
Metodi
AddAsync
Aggiunge un elemento alla coda.
Parametri
Il valore dell'elemento da aggiungere alla coda.
Tempo di scadenza dell'elemento, in secondi, dopo cui l'elemento verrà automaticamente rimosso dalla coda.
Priorità dell'elemento. Gli elementi con una maggiore priorità vengono recuperati dalla coda prima degli elementi con una minor priorità.
Restituzioni
ReadAsync
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 agli altri ReadAsync per il periodo dell'invisibilità. Gli elementi devono essere esplicitamente rimossi dalla coda con MemoryStoreQueue:RemoveAsync() prima che il tempo di invisibilità scada. Il tempo di invisibilità predefinito è 30 secondi, a meno che un valore diverso non sia stato fornito in
Parametri
Numero di elementi da leggere. Il valore massimo consentito di questo parametro è 100.
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 alcun oggetto. Il valore predefinito è falso.
La durata, in secondi, per cui il metodo aspetterà se il numero richiesto di oggetti non è immediatamente disponibile nella coda. I read vengono tentati ogni due secondi durante questo periodo. Questo parametro può essere impostato a zero per indicare nessun attesa. Se questo parametro non viene fornito o impostato su -1, il metodo aspetterà indefinitamente.
Restituzioni
Un tutorial di due elementi. Il primo elemento è un array di valori di oggetto letti dalla coda. Il secondo elemento è un identificatore di stringa che dovrebbe essere passato a MemoryStoreQueue:RemoveAsync() per rimuovere permanentemente 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:
- If MemoryStoreQueue:ReadAsync() fails, no items are retrieved from the queue. An item will be picked up for processing during the next iteration of the loop.
- If MemoryStoreQueue:ReadAsync() succeeds but DataStoreService:UpdateAsync() fails, the item stays invisible until the queue's invisibility timeout expires, causing the item becoming visible again to be returned in a future loop iteration.
- Similarly, if MemoryStoreQueue:RemoveAsync() fails, the item will become visible again in the future and will be processed again.
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.
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
Rimuove un elemento o più elementi precedentemente letti dalla coda. Questo metodo utilizza l'identificatore restituito da MemoryStoreQueue:ReadAsync() per identificare gli elementi da Rimuovere. Se chiamato dopo l'esaurimento del tempo di invisibilità, la chiamata non ha effetto.
Parametri
Identifica gli oggetti da Eliminare. Usa il valore restituito da MemoryStoreQueue:ReadAsync() .
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:
- If MemoryStoreQueue:ReadAsync() fails, no items are retrieved from the queue. An item will be picked up for processing during the next iteration of the loop.
- If MemoryStoreQueue:ReadAsync() succeeds but DataStoreService:UpdateAsync() fails, the item stays invisible until the queue's invisibility timeout expires, causing the item becoming visible again to be returned in a future loop iteration.
- Similarly, if MemoryStoreQueue:RemoveAsync() fails, the item will become visible again in the future and will be processed again.
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.
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