Sebuah antrian adalah struktur data linier dengan koleksi item yang mengikuti prinsip pertama keluar (FIFO) atau menyediakan prioritas elemen berdasarkan kriteria yang telah ditentukan sebelumnya. Toko memori mendukung dua jenis antrian, FIFO antrian biasa dan antrian prioritas.Kedua jenis berbagi kumpulan fungsi yang sama untuk menginisialisasi antrian kosong, menambahkan data ke antrian, membaca data dari antrian, dan menghapus data dari antrian.
Antrian penyimpanan memori berguna untuk pemrosesan dan penyimpanan informasi pengguna, seperti tingkat keterampilan, untuk memudahkan pencocokan berdasarkan kriteria yang Anda inginkan.Sebagai contoh, Anda dapat menambahkan tempat lobi sebagai tempat awal pengalaman Anda, menggunakan antrian penyimpanan memori sebagai sistem penyimpanan informasi pengguna terpusat yang dapat diakses oleh banyak server, mengelola urutan penempatan pengguna yang menggunakan antrian, dan teleport pengguna yang telah menyelesaikan matchmaking ke tempat utama pengalaman Anda.
Dapatkan antrian
Untuk mendapatkan antrian, panggil dengan nama , yang global dalam pengalaman untuk setiap skrip untuk mengakses, dan batas waktu tidak terlihat opsional dalam beberapa detik, yang mencegah pemrosesan duplikat item antrian yang sama.Batas waktu tidak terlihat adalah 30 detik secara default jika Anda meninggalkannya kosong seperti contoh kode berikut.
Mendapatkan Antrian Kosong
local MemoryStoreService = game:GetService("MemoryStoreService")local queue = MemoryStoreService:GetQueue("Queue1")
Ketika antrian memproses item di dalamnya, batas waktu tidak terlihat berlaku untuk item, membuatnya tidak terlihat dari diproses oleh server lain, karena beberapa server dapat memperbarui antrian secara bersamaan.Meskipun diharapkan untuk menyelesaikan kedua operasi baca dan penghapusan untuk item selama durasi jeda waktu tidak terlihat, jika terjadi kesalahan yang menyebabkan item tetap berada di antrian setelah jeda berlalu, item menjadi terlihat untuk diproses lagi.Dengan melakukan ini, batas waktu tidak terlihat menjamin bahwa semua item dalam antrian masih dapat diproses bahkan jika masalah tak terduga terjadi.
Setelah Anda mendapatkan antrian, hubungi salah satu fungsi berikut untuk membaca atau menulis data di dalamnya:
Fungsi | Tindakan |
---|---|
MemoryStoreQueue:AddAsync() | Tambahkan item baru ke antrian. |
MemoryStoreQueue:ReadAsync() | Baca satu atau lebih item dari antrian sebagai satu operasi. |
MemoryStoreQueue:RemoveAsync() | Hapus satu atau lebih item yang sebelumnya dibaca dari antrian. |
Tambahkan data
Untuk menambahkan item baru ke antrian, panggil MemoryStoreQueue:AddAsync() dengan nilai item, waktu kedaluwarsa dalam detik, dan prioritas opsional item.Jika Anda ingin menyimpan antrian Anda dalam urutan FIFO, Anda dapat meninggalkan prioritas kosong atau melewati 0 .
Menambahkan Data ke Antrian
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
Baca dan hapus data
Untuk membaca satu atau lebih item dari antrian sekaligus, panggil MemoryStoreQueue:ReadAsync() , yang men返ikan id mewakili item yang dibaca.Saat Anda selesai memproses item, segera panggil MemoryStoreQueue:RemoveAsync() untuk menghapusnya dari antrian dengan id .Ini memastikan bahwa Anda tidak pernah memproses item lebih dari sekali.Untuk menangkap dan menanggapi semua item yang terus ditambahkan ke antrian, termasuk siklus loop seperti contoh berikut:
Membaca dan Menghapus Data dari Antrian dengan Lingkaran
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
-- Lingkaran pemrosesan antrian
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