MemoryStoreQueue
*Bu içerik, yapay zekâ (beta) kullanılarak çevrildi ve hatalar içerebilir. Sayfayı İngilizce görüntülemek için buraya tıkla.
MemoryStore içinde bir sıraya erişim sağlar.Bir sıra, rastgele öğeler için geçici depolama sağlayan bir veri yapısıdır (maksimum öğe boyutuna kadar - Hafıza Depolama Sınırlarına bakın ).Her sıra öğesi sayısal bir önceliğe sahiptir: MemoryStore öncelikle daha yüksek önceliğe sahip öğeleri sıradan alır ve aynı önceliğe sahip öğeleri ek sırayla alır.
Sırada bulunan öğeler, belirli bir süre sonra sona ermek üzere seçeneğe bağlı olarak ayarlanabilir.Süresi dolmuş öğeler, aslında hiç eklenmemiş gibi sıradan kaybolur.
Özet
Özellikler
Yöntemler
Sıraya bir öğe ekler.
Sırada bir veya daha fazla öğe okur.
Sıradan önce okunan bir veya daha fazla öğeyi kaldırır.
Özellikler
Yöntemler
AddAsync
Sıraya bir öğe ekler.
Parametreler
Sıraya eklenmesi gereken öğenin değeri.
Eşyanın son kullanma süresi, saniyeler içinde, ardından eşya otomatik olarak sıradan kaldırılacak.
Eşya önceliği. Daha yüksek önceliğe sahip eşyalar, daha düşük önceliğe sahip eşyalardan önce sırada alınır.
Dönüşler
ReadAsync
Sıradaki bir veya daha fazla öğeyi tek bir atomik işlem olarak okur.
Bu yöntem, döndürülen öğeleri otomatik olarak kuyruktan silmez, ancak görünmezlik süresi için diğer ReadAsync çağrıları için görünmez hale getirir.Öğeler, görünmezlik süresi dolmadan önce açıkça kuyruktan kaldırılmalıdır MemoryStoreQueue:RemoveAsync() invisibility timeout süresi dolmadan önce.Görünmezlik süresi sona eriş süresi, MemoryStoreService:GetQueue() farklı bir değer sağlanmadıkça 30 saniye olarak ayarlanır.
Parametreler
okuöğe sayısı. Bu parameternin maksimum izin verilen değeri 100'dür.
Sıra count öğeden daha az olduğunda, yöntemin davranışını kontrol eder: yanlış olarak ayarlanırsa, tüm mevcut öğeleri döndürür; doğru olarak ayarlanırsa, hiçbir öğe döndürmez.Varsayılan değer false'dur.
Yöntemin, gerekli sayıda öğe hemen mevcut olmadığında bekleyeceği süre, saniyeler içinde. süre, saniyeler içinde.Okumalar bu süre boyunca her iki saniye içinde denelenir.Bu değer, bekleme olmadığını göstermek için sıfıra ayarlanabilir.Bu değer sağlanmaz veya -1 olarak ayarlanmazsa, yöntem süresiz bekleyecektir.
Dönüşler
İki elemanlı bir tuplu.İlk eleman, sırktan okunan bir dizi öğe değeridir.İkinci eleman, kuyruktan kalıcı olarak bu öğeleri kaldırmak için MemoryStoreQueue:RemoveAsync() geçmesi gereken bir dize tanımlayıcıdır.
Kod Örnekleri
The following code sample demonstrates using MemoryStoreQueue:ReadAsync() and MemoryStoreQueue:RemoveAsync() to reliably read, process, and remove items from a queue. Though this process can be as complicated as necessary, this example simply sets a flag in the corresponding data store item, which guarantees that every item will eventually be processed even if some of the calls encounter errors or the server crashes:
- If MemoryStoreQueue:ReadAsync() fails, no items are retrieved from the queue. An item will be picked up for processing during the next iteration of the loop.
- If MemoryStoreQueue:ReadAsync() succeeds but DataStoreService:UpdateAsync() fails, the item stays invisible until the queue's invisibility timeout expires, causing the item becoming visible again to be returned in a future loop iteration.
- Similarly, if MemoryStoreQueue:RemoveAsync() fails, the item will become visible again in the future and will be processed again.
Depending on where the failure happens, it's possible that an item will be processed more than once. You should account for that like the following code sample, in which the end result is the same even if DataStoreService:UpdateAsync() is invoked multiple times.
local MemoryStoreService = game:GetService("MemoryStoreService")
local DataStoreService = game:GetService("DataStoreService")
local queue = MemoryStoreService:GetQueue("PlayerQueue")
local dataStore = DataStoreService:GetDataStore("PlayerStore")
while true do
pcall(function()
-- wait for an item to process
local items, id = queue:ReadAsync(1, false, 30)
-- check if an item was retrieved
if #items > 0 then
-- mark the item as processed
dataStore:UpdateAsync(items[0], function(data)
data = data or {}
data.processed = 1
return data
end)
-- remove the item from the queue
queue:RemoveAsync(id)
end
end)
end
RemoveAsync
Sıradan önce okunan bir veya daha fazla öğeyi kaldırır.Bu yöntem, kaldırılacak öğeleri tanımlamak için MemoryStoreQueue:ReadAsync() tarafından döndürülen tanımlayıcıyı kullanır.Görünmezlik süresi dolduktan sonra çağrılırsa, çağrının bir etkisi yoktur.
Parametreler
Silinecek öğeleri tanımlar. MemoryStoreQueue:ReadAsync() tarafından döndürülen değeri sil.
Dönüşler
Kod Örnekleri
The following code sample demonstrates using MemoryStoreQueue:ReadAsync() and MemoryStoreQueue:RemoveAsync() to reliably read, process, and remove items from a queue. Though this process can be as complicated as necessary, this example simply sets a flag in the corresponding data store item, which guarantees that every item will eventually be processed even if some of the calls encounter errors or the server crashes:
- If MemoryStoreQueue:ReadAsync() fails, no items are retrieved from the queue. An item will be picked up for processing during the next iteration of the loop.
- If MemoryStoreQueue:ReadAsync() succeeds but DataStoreService:UpdateAsync() fails, the item stays invisible until the queue's invisibility timeout expires, causing the item becoming visible again to be returned in a future loop iteration.
- Similarly, if MemoryStoreQueue:RemoveAsync() fails, the item will become visible again in the future and will be processed again.
Depending on where the failure happens, it's possible that an item will be processed more than once. You should account for that like the following code sample, in which the end result is the same even if DataStoreService:UpdateAsync() is invoked multiple times.
local MemoryStoreService = game:GetService("MemoryStoreService")
local DataStoreService = game:GetService("DataStoreService")
local queue = MemoryStoreService:GetQueue("PlayerQueue")
local dataStore = DataStoreService:GetDataStore("PlayerStore")
while true do
pcall(function()
-- wait for an item to process
local items, id = queue:ReadAsync(1, false, 30)
-- check if an item was retrieved
if #items > 0 then
-- mark the item as processed
dataStore:UpdateAsync(items[0], function(data)
data = data or {}
data.processed = 1
return data
end)
-- remove the item from the queue
queue:RemoveAsync(id)
end
end)
end