Bir kuyruk, ya birinci giren ilk çıkar (FIFO) ilkesini takip eden ya da önceden tanımlanmış kriterlere göre öğeleri önceliklendiren, öğelerin koleksiyonu olan doğrusal bir veri yapısıdır. Bellek depoları FIFO normal kuyruklar ve öncelik kuyrukları olmak üzere iki tür kuyruk destekler. Her iki tür de boş bir kuyruk başlatma, kuyruğa veri ekleme, kuyruktan veri okuma ve kuyruktan veri çıkarma için aynı dizi fonksiyonları paylaşır.
Bellek depolama kuyrukları, sıralı işleme ve kullanıcı bilgilerini depolama açısından faydalıdır. Örneğin, bir lobiyi oyununuzun başlangıç yeri olarak ekleyebilir, bellek depolama kuyruklarını birden fazla sunucu tarafından erişilebilen merkezi kullanıcı bilgileri depolama sistemi olarak kullanabilir, kullanıcıların yerleştirme sırasını kuyruklar kullanarak yönetebilir ve eşleştirme işlemini tamamlayan kullanıcıları oyununuzun ana yerine teleport edebilirsiniz.
Bir kuyruğu alın
Bir kuyruğu almak için, MemoryStoreService:GetQueue() çağrısını yapın ve ad parametresini belirtin; bu, herhangi bir scriptin erişim sağlayabileceği şekilde oyunun içinde globaldir. Ayrıca, aynı kuyruk öğesinin tekrar işlenmesini engelleyen isteğe bağlı bir görünmezlik zaman aşımı (invisibility timeout) süresi de dahil edebilirsiniz. Görünmezlik zaman aşımı varsayılan olarak 30 saniyedir; aşağıdaki kod örneğinde olduğu gibi boş bırakırsanız.
Boş Bir Kuyruğu Almalocal MemoryStoreService = game:GetService("MemoryStoreService")local queue = MemoryStoreService:GetQueue("Queue1")
Bir kuyruk içinde bir öğe işlenirken, görünmezlik zaman aşımı, öğeye uygulanır; bu durum, başka sunucular tarafından işlenmesini engeller, çünkü birden fazla sunucu kuyrukları eşzamanlı olarak güncelleyebilir. Görünmezlik zaman aşımı süresi boyunca bir öğe için okuma ve çıkarma işlemlerinin tamamlanması beklenirken, eğer zaman aşımının sona ermesinden sonra öğenin kuyrukta kalmasına neden olan bir hata oluşursa, öğeler tekrar işlenebilir hale gelir. Bu sayede, görünmezlik zaman aşımı, beklenmedik sorunlar meydana gelse bile, kuyrukta bulunan tüm öğelerin hala işlenebileceğini garanti eder.
Bir kuyruğu aldıktan sonra, aşağıdaki işlevlerden herhangi birini çağırın:
| Fonksiyon | İşlem |
|---|---|
| MemoryStoreQueue:AddAsync() | Ekle kuyruğa yeni bir öğe. |
| MemoryStoreQueue:ReadAsync() | Oku kuyruğun içinde bir veya daha fazla öğeyi tek bir işlem olarak. |
| MemoryStoreQueue:RemoveAsync() | Kaldır daha önce kuyruktan okunan bir veya daha fazla öğeyi. |
| MemoryStoreQueue:GetSizeAsync() | Al kuyruğun içindeki öğe sayısını. |
Veri ekle
Kuyruğa yeni bir öğe eklemek için, MemoryStoreQueue:AddAsync() çağrısını yapın ve öğe değerini, bir zaman aşımını saniye cinsinden ve isteğe bağlı bir öğe önceliğini belirtin. Kuyrugunuzu FIFO sırasını koruyacak şekilde tutmak istiyorsanız, önceliği boş bırakabilir veya 0 geçebilirsiniz.
Kuyruğa Veri Ekleme
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
Veri oku ve kaldır
Kuyruktan bir veya daha fazla öğeyi bir seferde okumak için MemoryStoreQueue:ReadAsync() çağrısını yapın; bu işlem, okunan öğeyi temsil eden bir id döndürür. Öğeleri işledikten hemen sonra, id ile birlikte onları kuyruktan silmek için MemoryStoreQueue:RemoveAsync() çağrısını yapın. Bu, bir öğeyi birden fazla kez işlemeyeceğinizi garanti eder. Kuyruğa sürekli olarak eklenen tüm öğeleri yakalamak ve yanıt vermek için, aşağıdaki kod örneğindeki gibi bir döngü ekleyin:
Döngü ile Kuyruktan Veri Okuma ve Kaldırma
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
-- Kuyruk işleme döngüsü
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
Boyutu al
Kuyruğun içindeki öğe sayısını almak için, MemoryStoreQueue:GetSizeAsync() çağrısını yapın. Bu yöntem, isteğe bağlı bir boolean excludeInvisible alır. Eğer true ise, görünmez öğeler döndürülen sayıdan hariç tutulur. Bu boolean varsayılan olarak false'dur.
Kuyruğun Boyutunu Alma
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