Hàng đợi lưu trữ bộ nhớ

*Nội dung này được dịch bằng AI (Beta) và có thể có lỗi. Để xem trang này bằng tiếng Anh, hãy nhấp vào đây.

Một hàng đợi là một cấu trúc dữ liệu linear với một bộ sưu tập các mục theo nguyên tắc first-in-first-out (FIFO) hoặc ưu tiên các yếu tố dựa trên các tiêu chí được xác định trước. Kho lưu trữ bộ nhớ hỗ trợ hai loại hàng đợi, hàng đợi thường FIFO và hàng đợi ưu tiên .Cả hai loại chia sẻ cùng một bộ chức năng cho việc khởi tạo hàng chờ trống, thêm dữ liệu vào hàng chờ, đọc dữ liệu từ hàng chờ và xóa dữ liệu khỏi hàng chờ.

Hàng đợi kho lưu trữ bộ nhớ hữu ích cho xử lý và lưu trữ thông tin người dùng, chẳng hạn như cấp độ kỹ năng, để dễ dàng tìm trận theo các tiêu chí mong muốn của bạn.Ví dụ, bạn có thể thêm một nơi sảnh làm nơi bắt đầu trải nghiệm của bạn, sử dụng hàng đợi lưu trữ bộ nhớ như một hệ thống lưu trữ thông tin người dùng tập trung có thể truy cập bởi nhiều máy chủ, quản lý lệnh xếp đặt của người dùng sử dụng hàng đợi và dịch chuyển người dùng đã hoàn thành trận đấu vào nơi chính của trải nghiệm của bạn.

Nhận một hàng đợi

Để có được hàng đợi, gọi MemoryStoreService:GetQueue() với một tên , là toàn cầu trong trải nghiệm đối với bất kỳ kịch bản nào để truy cập, và một thời gian chờ tàng hình tùy chọn trong giây lát, ngăn chặn việc xử lý lặp lại của cùng một vật phẩmtrong hàng đợi.Thời gian chờ vô hiệu hóa là 30 giây theo mặc định nếu bạn để trống như ví dụ mã sau.

Nhận một hàng chờ trống

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

Khi một hàng đợi đang xử lý một vật phẩm trong nó, thời gian chờ vô hiệu hóa được áp dụng cho vật phẩm, biến nó trở nên vô hình khi được xử lý bởi các máy chủ khác, vì nhiều máy chủ có thể cập nhật hàng đợi cùng một lúc.Mặc dù có thể hoàn thành cả các hoạt động đọc và xóa cho một vật phẩm trong thời gian chờ xử lý kéo dài, nếu xảy ra lỗi gây ra vật phẩm vẫn còn trong hàng chờ sau khi hết thời gian chờ, các vật phẩm trở nên hiển thị để xử lý lại.Khi làm như vậy, thời gian chờ vô hiệu hóa đảm bảo rằng tất cả các mục trong hàng đợi vẫn có thể được xử lý ngay cả khi xảy ra các vấn đề bất ngờ.

Sau khi bạn nhận được một hàng đợi, gọi bất kỳ chức năng nào sau đây để đọc hoặc ghi dữ liệu vào nó:

Chức năngHành động
MemoryStoreQueue:AddAsync()Thêm một mục mới vào hàng đợi.
MemoryStoreQueue:ReadAsync()Đọc một hoặc nhiều mục từ hàng đợi như một lần thực hiện duy nhất.
MemoryStoreQueue:RemoveAsync()Xóa một hoặc nhiều mục đã được đọc trước đó từ hàng đợi.

Thêm dữ liệu

Để thêm một mục mới vào hàng đợi, gọi MemoryStoreQueue:AddAsync() với giá trị mục, thời gian hết hạn trong giây lát và một ưu tiên tùy chọn của vật phẩm.Nếu bạn muốn giữ hàng đợi của mình trong chuỗi FIFO, bạn có thể để trống ưu tiên hoặc truyền 0 .

Thêm dữ liệu vào hàng đợi

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

Đọc và xóa dữ liệu

Để đọc một hoặc nhiều mục từ hàng đợi cùng một lúc, gọi MemoryStoreQueue:ReadAsync() , trả về một id đại diện cho vật phẩmđọc.Khi bạn hoàn thành xử lý các mục, ngay lập tức gọi MemoryStoreQueue:RemoveAsync() để xóa chúng khỏi hàng đợi với id của nó.Điều này đảm bảo rằng bạn không bao giờ xử lý một mục nhiều hơn một lần.Để bắt và trả lời tất cả các mục được thêm vào hàng đợi liên tục, bao gồm một vòng lặp giống như ví dụ mã sau:

Đọc và xóa dữ liệu từ hàng chờ với vòng lặp

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
-- Vòng xử lý hàng đợi
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