Hafıza depolarının sıralama veri yapısı, anlık hafıza erişiminde sık hafıza erişiminde anahtar değer çiftleri olarak sık hafıza erişiminde anahtar değerlerini ve anahtar değerlerini tutar ve etkinleştirilen sıralama anahtar
Sınırlar
Veri yapısı boyut sınırlarına ek olarak, sıralanmış haritaların bir anahtar boyut sınırı 128 karakter, bir değer boyut sınırı 32 KB ve bir sıralama anahtarı boyut sınırı 128 karakter.
Tecrübeniz için bu sınırı aşan verileri depolmak gerekirse, anahtar özelliği ile birlikte birkaç veri yapısı arasında bölme ve dağıtma tekniğini kabul edebilirsiniz. Bölme belleği de sisteminizin skalabilitesini artırabilir.
Sıralanmış Bir Harita Alınır
Sıralanmış bir harita almak için, Class.MemoryStoreService:GetSortedMap() ile bir isim ile çağırın</a> bir harita için. İsim, deneyim içindeki bir haritadaki global bir isimdir, böylece ismi kullanarak herhangi bir haritaya erişebilirsiniz.
Sıralanmış Bir Harita Alınır
local MemoryStoreService = game:GetService("MemoryStoreService")local sortedMap = MemoryStoreService:GetSortedMap("SortedMap1")
Sıralanmış bir harita aldıktan sonra, verileri okumak veya yazmak için aşağıdaki işlevlerden herhangi birini çağırın:
Fonksiyon | Eylem |
---|---|
MemoryStoreSortedMap:SetAsync() | Eklemek yeni bir anahtar ekleyin veya anahtar mevcutsa değer ve/veya sıralama anahtarını yeniden yazın. |
MemoryStoreSortedMap:GetAsync() | Okuyun belirli bir anahtarı. |
MemoryStoreSortedMap:GetRangeAsync() | Okuyun tüm mevcut anahtarları veya belirli bir menzili okuyun. |
MemoryStoreSortedMap:UpdateAsync() | Güncellemeyi öğrencikten sonra bir anahtarın/ya da sıralama düzenleyicisinden alındıktan sonra değerini güncellemeyi güncellemeyi güncellemeyi güncellemeyi güncellemeyi güncellemeyi güncellemeyi güncellemeyi güncellemeyi güncellemeyi güncellemeyi güncellemeyi güncellemeyi güncellemeyi güncellemeyi güncellemeyi güncellemeyi güncellemeyi güncellemeyi güncellemeyi güncellemeyi güncelle |
MemoryStoreSortedMap:RemoveAsync() | Kaldır sıralanmış haritadan bir anahtarı kaldır. |
Verileri Ekleme veya Yazma
Yeni bir anahtar eklemek veya anahtarın sıralanmış haritasındaki değerini veya sıralama anahtarının süresini değiştirmek için Class.MemoryStoreSortedMap:SetAsync()</
Anahtarlarınızın sıralama düzeni, bir anahtarın üstünlüğünü bir anahtarda ilk olarak alır. Örneğin, yukarıda sıralanmışken, sayısal sıralama anahtarı ilk sıralama yapar, ardından yazılım dü
Biraz veri sıralanmış yükselenme sırasına göre örneği -
{Key: "player1", Value: someValue1, SortKey: -1}{Key: "player2", Value: someValue2, SortKey: 0}{Key: "player4", Value: someValue3, SortKey: 1}{Key: "player5", Value: someValue4, SortKey: 1}{Key: "player3", Value: someValue5, SortKey: 3.14}{Key: "player6", Value: someValue6, SortKey: "someString"}{Key: "player0", Value: someValue7}{Key: "player7", Value: someValue8}
player0 ile tüm anahtarları bir sıralama anahtarıyla sıralar. player6 ile tüm anahtarları bir sayısal sıralama anahtarıyla sıralar. player4 ve 1>player51> aynı sıralama anahtarıyla sıralanır, bu yüzden sıralama sayısına göre yükselenen s
Sıralanmış Bir Haritaya Veriler Ekleme
local MemoryStoreService = game:GetService("MemoryStoreService")
local sortedMap = MemoryStoreService:GetSortedMap("SortedMap1")
local setSuccess, _ = pcall(function()
return sortedMap:SetAsync("User_1234", 1000, 30, 3.14152)
end)
if setSuccess then
print("Set succeeded.")
end
Verileri Almak
Belirli bir anahtara bağlı bir veri değeri alabilir veya bir dizi değerini ve anahtarların içindeki anahtarları sıralayabilirsiniz.
Bir Anahtar ile Veri Alınması
Sıralanmış haritadaki bir anahtarın değerini ve sıralama anahtarının sıralanmış sırasını almak için, anahtarın MemoryStoreSortedMap:GetAsync() çağır Class.MemoryStoreSortedMap:GetAsync() .
Sıralanmış bir hariteden belirli bir anahtar alınıyor
local MemoryStoreService = game:GetService("MemoryStoreService")
local sortedMap = MemoryStoreService:GetSortedMap("SortedMap1")
local setSuccess, _ = pcall(function()
return sortedMap:SetAsync("User_1234", 1000, 30, 3.14152)
end)
if setSuccess then
print("Set succeeded.")
end
local item
local getSuccess, getError = pcall(function()
item = sortedMap:GetAsync("User_1234")
end)
if getSuccess then
print(item)
else
warn(getError)
end
Çokluklu Anahtarlarla Veri Alınıyor
Sıralanmış haritadaki bir dizi anahtar için çok sayıda veri almak için, MemoryStoreSortedMap:GetRangeAsync() diyor. Bu işlev
Sıralanmış Bir Haritadan Bir Dizi Anahtar Alın
local MemoryStoreService = game:GetService("MemoryStoreService")
local sortedMap = MemoryStoreService:GetSortedMap("SortedMap1")
local lowerBound = {}
lowerBound["key"] = "10"
lowerBound["sortKey"] = 100
local upperBound = {}
upperBound["key"] = "50"
upperBound["sortKey"] = 500
-- Başlangıç nadiren 20 tane eşyayı alın
local getSuccess, items = pcall(function()
return sortedMap:GetRangeAsync(
Enum.SortDirection.Ascending, 20, lowerBound, upperBound)
end)
if getSuccess then
for _, item in items do
print(item.key)
print(item.sortKey)
end
end
Verileri Güncelleme
Bir anahtarın sıralanmış bir haritadan değerini ve sıralamayı geri almak ve güncellermek için, MemoryStoreSortedMap:UpdateAsync() ile bir anahtarın ismini, bir çağrı işlevini güncellemeyi ve değer için bir
Çoğu deneyim için, birden fazla sunucu aynı anda anahtarı güncellemeyi ve değerleri değiştmeyi mümkün kılabilir ve değerleri güncellemeden önce her zaman en son değeri okumak için kullanmalısınız. As UpdateAsync() iletken olarak değiştirilir, birden fazla sunucu güncellemeden önce her zaman en son
Örneğin, aşağıdaki kod örneği, bir oyuncunun bir tabloyu günceller ve skoru öldürmeleri / ölümleri için bir lider tablosunda günceller. Skor, öldürmeler / ölümler olarak hesaplanır. UpdateAsync() , öldürmeler ve ölümleri
Sıralama Haritasındaki bir oyuncunun lider tablosu skorunu güncelleme
local MemoryStoreService = game:GetService("MemoryStoreService")
local sortedMap = MemoryStoreService:GetSortedMap("Leaderboard")
local function updateLeaderboard(itemKey, killsToAdd, deathsToAdd)
local success, newStats, newScore = pcall(function()
return sortedMap:UpdateAsync(itemKey, function(playerStats, playerScore)
playerStats = playerStats or { kills = 0, deaths = 0 }
playerStats.kills += killsToAdd
playerStats.deaths += deathsToAdd
if playerStats then
-- `playerScore` haritadaki öğeleri sıralamak için kullanılan sıralama anahtarıdır
playerScore = playerStats.kills / math.max(playerStats.deaths, 1)
return playerStats, playerScore
end
return nil
end, 30)
end)
if success then
print(newStats)
print(newScore)
end
end
Class.MemoryStoreSortedMap:UpdateAsync()|UpdateAsync() için gecikme, GetAsync() ve SetAsync()'a benzerdir, aksi takdirde içerik için gecikme vardır.
Kontrol oluştuğunda, sistem bu üç olaydan biri olana kadar otomatik olarak işlemi tekrar deneyecek: işlem başarılı olur, çağrı işlevi nil'i döndürür veya maksimum tekrar sayısına ulaşılır. Eğer sistem maksimum tekrar sayısına ulaşırsa, bir çatışma döndürür.
Verileri Kaldırma
Sıralama haritasından bir anahtarı kaldırmak ve bir memori depolarındaki tüm verileri silmek için MemoryStoreSortedMap:RemoveAsync() kullanabilirsiniz.
Bir Anahtarı Kaldırma
Sıralanmış haritadan bir anahtarı kaldırmak için, MemoryStoreSortedMap:RemoveAsync() ile bir anahtar ismiyle çağır.
Sıralanmış bir haritadan bir anahtar kaldır
local MemoryStoreService = game:GetService("MemoryStoreService")
local sortedMap = MemoryStoreService:GetSortedMap("SortedMap1")
local setSuccess, _ = pcall(function()
return sortedMap:SetAsync("User_1234", 1000, 30, "someStringSortKey")
end)
if setSuccess then
print("Set succeeded.")
end
local removeSuccess, removeError = pcall(function()
sortedMap:RemoveAsync("User_1234")
end)
if not removeSuccess then
warn(removeError)
end
Tüm Verileri Silme
Sıralı haritalardaki hafiyayı silmek için, tüm anahtarlarınızı MemoryStoreSortedMap:GetRangeAsync() ile listeleyin, sonra MemoryStoreSortedMap:RemoveAsync() ile onları kaldırın.
Sıralı Bir Haritada Hafızayı Sil
local MemoryStoreService = game:GetService("MemoryStoreService")
local sortedMap = MemoryStoreService:GetSortedMap("SortedMap1")
-- Nil'in ilk öğesi ile başlayan ilk düşük bağlantı çözülür
local exclusiveLowerBound = nil
while true do
-- Mevcut düşük sınırdan başlayan yüzlerce öğeye ulaşın
local getRangeSuccess, items = pcall(function()
return sortedMap:GetRangeAsync(Enum.SortDirection.Ascending, 100, exclusiveLowerBound)
end)
if getRangeSuccess then
local removeSuccess = true
local removeError = nil
for _, item in items do
removeSuccess, removeError = pcall(function()
sortedMap:RemoveAsync(item.key)
end)
end
-- Eşyaları kaldırırken bir hata oluştuysa, aynı özel düşük sınırlarıyla tekrar deneyin
if not removeSuccess then
warn(removeError)
-- Menzil yüzden fazla bir öğeden daha küçükse, haritanın sonuna ulaşılır
elseif #items < 100 then
break
else
-- Son alınan anahtar, bir sonraki itera için özel bir alt sınırdır
exclusiveLowerBound = {}
exclusiveLowerBound["key"] = items[#items].key
exclusiveLowerBound["sortKey"] = items[#items].sortKey
end
end
end