A queue는 먼저 들어온 것이 먼저 나가는 (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