Cola de almacenamiento en memoria

*Este contenido se traduce usando la IA (Beta) y puede contener errores. Para ver esta página en inglés, haz clic en aquí.

Una cola es una estructura de datos lineal con una colección de elementos que sigue el principio de primero en entrar, primero en salir (FIFO) o que prioriza los elementos en función de criterios predefinidos. Los almacenamientos en memoria admiten dos tipos de colas, las colas regulares FIFO y las colas de prioridad. Ambos tipos comparten el mismo conjunto de funciones para inicializar una cola vacía, agregar datos a la cola, leer datos de la cola y eliminar datos de la cola.

Las colas de almacenamiento en memoria son útiles para el procesamiento basado en el orden y para almacenar información del usuario, como niveles de habilidad, para facilitar el emparejamiento según los criterios deseados. Por ejemplo, puedes agregar un lugar de vestíbulo como el lugar de inicio de tu juego, usar colas de almacenamiento en memoria como un sistema de almacenamiento centralizado de información del usuario accesible por múltiples servidores, gestionar el orden de colocación de los usuarios utilizando las colas y teletransportar a los usuarios que han completado el emparejamiento al lugar principal de tu juego.

Obtener una cola

Para obtener una cola, llama a MemoryStoreService:GetQueue() con un nombre, que es global dentro del juego para que cualquier script lo acceda, y un tiempo de invisibilidad opcional en segundos, que previene el procesamiento duplicado del mismo elemento de la cola. El tiempo de invisibilidad es de 30 segundos por defecto si lo dejas vacío como en el siguiente ejemplo de código.

Obteniendo una Cola Vacía

local MemoryStoreService = game:GetService("MemoryStoreService")
local queue = MemoryStoreService:GetQueue("Queue1")

Cuando una cola está procesando un elemento en ella, el tiempo de invisibilidad se aplica al elemento, volviéndolo invisible para el procesamiento por otros servidores, ya que múltiples servidores pueden actualizar la cola simultáneamente. Aunque se espera completar tanto las operaciones de lectura como de eliminación para un elemento durante la duración del tiempo de invisibilidad, si ocurre un error que hace que el elemento permanezca en la cola después de que ha pasado el tiempo de espera, los elementos se vuelven visibles para su procesamiento nuevamente. De esta manera, el tiempo de invisibilidad garantiza que todos los elementos en una cola aún se puedan procesar incluso si ocurren problemas inesperados.

Después de obtener una cola, llama a cualquiera de las siguientes funciones:

FunciónAcción
MemoryStoreQueue:AddAsync()Agregar un nuevo elemento a la cola.
MemoryStoreQueue:ReadAsync()Leer uno o más elementos de la cola como una sola operación.
MemoryStoreQueue:RemoveAsync()Eliminar uno o más elementos previamente leídos de la cola.
MemoryStoreQueue:GetSizeAsync()Obtener el número de elementos en la cola.

Agregar datos

Para agregar un nuevo elemento a la cola, llama a MemoryStoreQueue:AddAsync() con el valor del elemento, un tiempo de expiración en segundos y una prioridad opcional para el elemento. Si deseas mantener tu cola en la secuencia FIFO, puedes dejar la prioridad vacía o pasar 0.

Agregando Datos a una Cola

local MemoryStoreService = game:GetService("MemoryStoreService")
local queue = MemoryStoreService:GetQueue("Queue1")
local addSuccess, addError = pcall(function()
queue:AddAsync("User_1234", 30, 1)
end)
if not addSuccess then
warn(addError)
end

Leer y eliminar datos

Para leer uno o más elementos de la cola a la vez, llama a MemoryStoreQueue:ReadAsync(), que retorna un id que representa el elemento leído. Cuando termines de procesar los elementos, llama inmediatamente a MemoryStoreQueue:RemoveAsync() para eliminarlos de la cola con su id. Esto asegura que nunca proceses un elemento más de una vez. Para capturar y responder a todos los elementos que se están añadiendo continuamente a una cola, incluye un bucle como el siguiente ejemplo de código:

Leyendo y Eliminando Datos de la Cola con Bucle

local MemoryStoreService = game:GetService("MemoryStoreService")
local queue = MemoryStoreService:GetQueue("Queue1")
local addSuccess, addError = pcall(function()
queue:AddAsync("User_1234", 30, 1)
end)
if not addSuccess then
warn(addError)
end
-- Bucle de procesamiento de cola
while true do
local readSuccess, items, id = pcall(function()
return queue:ReadAsync(1, false, 30)
end)
if not readSuccess then
task.wait(1)
elseif #items > 0 then
print(items, id)
local removeSuccess, removeError = pcall(function()
queue:RemoveAsync(id)
end)
if not removeSuccess then
warn(removeError)
end
end
end

Obtener tamaño

Para obtener el número de elementos en la cola, llama a MemoryStoreQueue:GetSizeAsync(). Este método toma un booleano opcional excludeInvisible. Cuando es true, los elementos invisibles se excluyen del conteo devuelto. Este booleano por defecto es false.

Obteniendo el Tamaño de una Cola

local MemoryStoreService = game:GetService("MemoryStoreService")
local queue = MemoryStoreService:GetQueue("Queue1")
local addSuccess, addError = pcall(function()
return queue:AddAsync("User_1234", 30, 1)
end)
if not addSuccess then
warn(addError)
end
local size
local success, sizError = pcall(function()
size = queue:GetSizeAsync(true)
end)
if success then
print(size)
else
warn(sizeError)
end
©2026 Roblox Corporation. Roblox, el logotipo de Roblox y "Powering Imagination" son algunas de nuestras marcas registradas y no registradas en los Estados Unidos y otros países.