内存存储队列

*此内容使用人工智能(Beta)翻译,可能包含错误。若要查看英文页面,请点按 此处

一个 队列 是一种线性数据结构,它包含一系列项目,可以遵循先进先出(FIFO)原则,或根据预定义的标准对元素进行优先级排序。 内存存储 支持两种类型的队列,FIFO 常规队列优先级队列。这两种类型共享相同的一组函数,用于初始化一个空队列、向队列中添加数据、从队列中读取数据以及从队列中删除数据。

内存存储队列对于基于顺序的处理和存储用户信息(例如技能等级)非常有用,以便根据您的期望标准促进匹配。例如,您可以将一个大厅地点作为您游戏的起始地点,使用内存存储队列作为一个集中式用户信息存储系统,多个服务器可访问,使用队列来管理用户的放置顺序,并将已完成匹配的用户传送到您游戏的主地点。

获取队列

要获取队列,请调用 MemoryStoreService:GetQueue(),并提供一个 名称,该名称在游戏中是全局的,任何脚本都可以访问,以及一个可选的 不可见超时(秒),其防止对相同队列项的重复处理。如果您将其留空,则不可见超时默认为 30 秒,以下代码示例展示了这一点。

获取一个空队列

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

当队列正在处理其中的某个项目时,不可见超时适用于该项目,使其在被其他服务器处理时变得不可见,因为多个服务器可以并发更新队列。尽管预计在不可见超时持续期间完成对一个项目的读取和删除操作,但如果发生错误导致项目在超时过后仍保留在队列中,项目将再次变为可见进行处理。通过这种方式,不可见超时确保即使发生意外问题,队列中的所有项目仍然可以被处理。

获取队列后,可以调用以下任一函数:

函数操作
MemoryStoreQueue:AddAsync()添加 一个新项目到队列。
MemoryStoreQueue:ReadAsync()读取 一个或多个项目作为单个操作。
MemoryStoreQueue:RemoveAsync()移除 之前从队列读取的一个或多个项目。
MemoryStoreQueue:GetSizeAsync()获取 队列中项目的数量。

添加数据

要向队列中添加一个新项目,请调用 MemoryStoreQueue:AddAsync(),并提供项目值、过期时间(秒)和一个可选的项目优先级。如果您希望保持队列的 FIFO 顺序,可以将优先级留空或传递 0

向队列添加数据

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

读取和移除数据

要一次读取一个或多个项目,请调用 MemoryStoreQueue:ReadAsync(),它返回一个 id,代表读取的项目。当您完成对项目的处理时,立即调用 MemoryStoreQueue:RemoveAsync() 通过其 id 从队列中删除它们。这确保您不会对同一个项目进行多次处理。为了捕获和响应不断添加到队列中的所有项目,请包括一个 循环,如以下代码示例所示:

使用循环读取和移除队列中的数据

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
-- 队列处理循环
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

获取大小

要获取队列中项目的数量,请调用 MemoryStoreQueue:GetSizeAsync()。该方法接受一个可选的布尔值 excludeInvisible。当它为 true 时,返回的计数中将排除不可见的项目。这个布尔值默认值为 false

获取队列的大小

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、Roblox 标志及 Powering Imagination 是我们在美国及其他国家或地区的注册与未注册商标。