Fila de armazenamento na memória

*Este conteúdo é traduzido por IA (Beta) e pode conter erros. Para ver a página em inglês, clique aqui.

Uma fila é uma estrutura de dados linear com uma coleção de itens que segue o princípio primeiro a entrar, primeiro a sair (FIFO) ou prioriza elementos com base em critérios predefinidos. Armazenamentos na memória suportam dois tipos de fila, as filas regulares FIFO e as filas de prioridade. Ambos os tipos compartilham o mesmo conjunto de funções para inicializar uma fila vazia, adicionar dados à fila, ler dados da fila e remover dados da fila.

As filas de armazenamento na memória são úteis para processamento baseado em ordem e armazenar informações do usuário, como níveis de habilidade, para facilitar o pareamento com base nos critérios desejados. Por exemplo, você pode adicionar um lugar de lobby como o lugar inicial do seu jogo, usar filas de armazenamento na memória como um sistema centralizado de armazenamento de informações do usuário acessível por vários servidores, gerenciar a ordem de colocação dos usuários usando as filas e teleportar usuários que completaram o pareamento para o lugar principal do seu jogo.

Obter uma fila

Para obter uma fila, chame MemoryStoreService:GetQueue() com um nome, que é global dentro do jogo para qualquer script acessar, e um tempo limite de invisibilidade opcional em segundos, que impede o processamento duplicado do mesmo item da fila. O tempo limite de invisibilidade é de 30 segundos por padrão se você deixá-lo vazio, como no exemplo de código a seguir.

Obtendo uma Fila Vazia

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

Quando uma fila está processando um item nela, o tempo limite de invisibilidade se aplica ao item, tornando-o invisível para ser processado por outros servidores, já que vários servidores podem atualizar a fila simultaneamente. Embora se espere que tanto as operações de leitura quanto de remoção de um item sejam concluídas durante a duração do tempo limite de invisibilidade, se ocorrer um erro que faça o item permanecer na fila após o tempo limite expirar, os itens tornam-se visíveis para processamento novamente. Ao fazer isso, o tempo limite de invisibilidade garante que todos os itens de uma fila ainda possam ser processados, mesmo que ocorram problemas inesperados.

Depois de obter uma fila, chame qualquer uma das seguintes funções:

FunçãoAção
MemoryStoreQueue:AddAsync()Adicionar um novo item à fila.
MemoryStoreQueue:ReadAsync()Ler um ou mais itens da fila como uma única operação.
MemoryStoreQueue:RemoveAsync()Remover um ou mais itens previamente lidos da fila.
MemoryStoreQueue:GetSizeAsync()Obter o número de itens na fila.

Adicionar dados

Para adicionar um novo item à fila, chame MemoryStoreQueue:AddAsync() com o valor do item, um tempo de expiração em segundos e uma prioridade opcional do item. Se você quiser manter sua fila na sequência FIFO, pode deixar a prioridade vazia ou passar 0.

Adicionando Dados a uma Fila

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

Ler e remover dados

Para ler um ou mais itens da fila ao mesmo tempo, chame MemoryStoreQueue:ReadAsync(), que retorna um id representando o item lido. Quando você terminar de processar os itens, chame imediatamente MemoryStoreQueue:RemoveAsync() para excluí-los da fila com seu id. Isso garante que você nunca processe um item mais de uma vez. Para capturar e responder a todos os itens que estão sendo continuamente adicionados a uma fila, inclua um loop como o seguinte exemplo de código:

Lendo e Removendo Dados da Fila com Loop

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
-- Loop de processamento da fila
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

Obter tamanho

Para obter o número de itens na fila, chame MemoryStoreQueue:GetSizeAsync(). Este método aceita um booleano opcional excludeInvisible. Quando ele é true, itens invisíveis são excluídos da contagem retornada. Esse booleano tem o padrão false.

Obtendo o Tamanho de uma Fila

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, o logotipo Roblox e Powering Imagination estão entre nossas marcas registradas e não registradas nos EUA e em outros países.