MemoryStoreQueue
*Este contenido se traduce usando la IA (Beta) y puede contener errores. Para ver esta página en inglés, haz clic en aquí.
Proporciona acceso a una cola dentro de MemoryStore.Una cola es una estructura de datos que proporciona almacenamiento temporal para elementos arbitrarios (hasta el tamaño máximo de elemento -- ver límites de almacenamiento de memoria ).Cada elemento de cola tiene una prioridad numérica: MemoryStore recupera primero los elementos con mayor prioridad de la cola, y recupera los elementos con la misma prioridad en orden de adición.
Los elementos en la cola se pueden configurar opcionalmente para expirar después de cierta cantidad de tiempo.Los elementos expirados simplemente desaparecen de la cola como si nunca se hubieran agregado.
Resumen
Métodos
Añade un artículo a la cola.
Lee uno o más artículos de la cola.
Elimina un artículo o artículos previamente leídos de la cola.
Propiedades
Métodos
AddAsync
Añade un artículo a la cola.
Parámetros
El valor del artículo para agregar a la cola.
Tiempo de expiración del artículo, en segundos, después del cual el artículo se eliminará automáticamente de la cola.
Prioridad de elemento. Los elementos con mayor prioridad se recuperan de la cola antes que los elementos con menor prioridad.
Devuelve
ReadAsync
Lee uno o más elementos de la cola como una sola operación atómica.
Este método no elimina automáticamente los elementos devueltos de la cola, sino que los hace invisibles para otras llamadas de Lectura simultánea durante el período de tiempo de expiración de invisibilidad.Los elementos deben ser eliminados explícitamente de la cola con MemoryStoreQueue:RemoveAsync() antes de que expire el tiempo de inactividad de invisibilidad.La desactivación del tiempo de invisibilidad se establece por defecto en 30 segundos a menos que se proporcione un valor diferente en MemoryStoreService:GetQueue() .
Parámetros
Número de artículos para leído. El valor máximo permitido de este parámetro es 100.
Controla el comportamiento del método en el caso de que la cola tenga menos de count artículos: si se establece en falso, el método devuelve todos los artículos disponibles; si se establece en verdad, no devuelve artículos.El valor predeterminado es falso.
La duración, en segundos, para la cual el método esperará si el número requerido de artículos no está disponible inmediatamente en la cola.Las lecturas se intentan cada segundo durante este período.Este parámetro se puede establecer en cero para indicar que no hay espera.Si este parámetro no se proporciona o se establece en -1, el método esperará indefinidamente.
Devuelve
Un tuple de dos elementos.El primer elemento es un array de valores de artículo leídos de la cola.El segundo elemento es un identificador de cadena que debe pasarse a MemoryStoreQueue:RemoveAsync() para eliminar permanentemente estos elementos de la cola.
Muestras de código
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
Elimina un artículo o artículos previamente leídos de la cola.Este método utiliza el identificador devuelto por MemoryStoreQueue:ReadAsync() para identificar los elementos a eliminar.Si se llama después de que haya expirado el tiempo de inactividad de invisibilidad, la llamada no tiene efecto.
Parámetros
Identifica los elementos para eliminar. Usa el valor devuelto por MemoryStoreQueue:ReadAsync().
Devuelve
Muestras de código
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