MemoryStoreHashMap
*Bu içerik, yapay zekâ (beta) kullanılarak çevrildi ve hatalar içerebilir. Sayfayı İngilizce görüntülemek için buraya tıkla.
Class.MemoryStoreService içindeki bir hash haritasına erişim sağlar. Bir hash haritası, string anahtarlarını herhangi bir değerle ilişkilendiren bir koleksiyondur (maksimum boyutun mümkün olduğunca yüksek olmasına izin veren maksimum boyut gibi). Anahtarların sıralanmasına garanti yoktur.
Özet
Özellikler
Yöntemler
Hash tablosunda bir anahtarın değerini alır.
Hash haritasındaki öğeleri listelemek için bir MemoryStoreHashMapPages nesneyi döndürür.
Hash haritasından bir öğe kaldırır.
Hash haritasındaki bir anahtarın değerini ayarlar.
Bir anahtarın değerini bir hachiz haritasından alır ve sizi yeni bir değere günceler.
Özellikler
Yöntemler
GetAsync
Hash tablosunda bir anahtarın değerini alır.
Parametreler
Geri getiristediğiniz değerin sahip olduğu anahtar.
Dönüşler
Eğer anahtar mevcut değilse değer, veya hiçbir değer.
Kod Örnekleri
local MemoryStoreService = game:GetService("MemoryStoreService")
local hashMap = MemoryStoreService:GetHashMap("HashMap1")
local key = "User_1234"
local value = 1000
local expiration = 30
local setSuccess, _ = pcall(function()
return hashMap:SetAsync(key, value, expiration)
end)
if setSuccess then
print("Set succeeded!")
end
local item
local getSuccess, getError = pcall(function()
item = hashMap:GetAsync(key)
end)
if getSuccess then
print(item)
else
warn(getError)
end
ListItemsAsync
Hash haritasındaki öğeleri listelemek için bir MemoryStoreHashMapPages nesnesi içerir. Geçerli menzil 1 ila 200 arasındadır.
Parametreler
Geri verilebilecek maksimum öğe sayısı.
Dönüşler
Class.MemoryStoreOperations sınıfına ait MemoryStoreHashMapPages eşyası.
Kod Örnekleri
local MemoryStoreService = game:GetService("MemoryStoreService")
local testHashMap = MemoryStoreService:GetHashMap("HashMap1")
local EXPIRATION = 600
local NUM_TEST_ITEMS = 32
local function populateHashMap(hashMap: MemoryStoreHashMap, numItems: number): { [string]: any }
print("Setting HashMap data...")
local createdItems = {}
for index = 1, numItems do
local key = tostring(index) -- HashMap keys must be strings
local value = `{key}_test_value`
local success, result = pcall(hashMap.SetAsync, hashMap, key, value, EXPIRATION)
if success then
createdItems[key] = value
else
warn(`Error setting key {key}: {result}`)
end
end
print("Done setting HashMap data.")
return createdItems
end
local function getItemsFromAllPages(pages: MemoryStoreHashMapPages): { [string]: any }
-- Purely for logging purposes, we track what page number we're on
local currentPageNumber = 1
local retrievedItems = {}
while not pages.IsFinished do
print(`Getting items on page {currentPageNumber}...`)
local items = pages:GetCurrentPage()
for _, entry in pairs(items) do
print(`\t{entry.key}: {entry.value}`)
retrievedItems[entry.key] = entry.value
end
-- Advance pages if there are more pages to read
if not pages.IsFinished then
pages:AdvanceToNextPageAsync()
currentPageNumber += 1
end
end
print("Finished reading all pages")
return retrievedItems
end
local function compareAllItems(retrievedItems: { [string]: any }, expectedItems: { [string]: any }): number
print("Comparing retrieved items to expected items...")
local numMatchingItems = 0
for key, expectedValue in pairs(expectedItems) do
if retrievedItems[key] == expectedValue then
numMatchingItems += 1
else
warn(`Mismatched retrieved value for key {key}: expected {expectedValue}, retrieved {retrievedItems[key]}`)
end
end
print("Comparison complete!")
return numMatchingItems
end
-- Keys added to the hashmap are also added to this expectedItems table.
-- Later, the retrieved hashmap items will be compared against this table of expected items.
local expectedItems = populateHashMap(testHashMap, NUM_TEST_ITEMS)
-- Getting pages can error. In this case, we will let it error and stop program execution,
-- but you may want to pcall it and handle it differently.
print(`Getting HashMap pages with ListItemsAsync...`)
local pages = testHashMap:ListItemsAsync(NUM_TEST_ITEMS)
local retrievedItems = getItemsFromAllPages(pages)
local numMatchingItems = compareAllItems(retrievedItems, expectedItems)
-- If there were no errors setting or getting items, all items should match.
print(`Program complete. {numMatchingItems}/{NUM_TEST_ITEMS} retrieved items matched the expected values.`)
RemoveAsync
Hash haritasından bir öğe kaldırır.
Parametreler
Kaldırmanın kaldır.
Dönüşler
Kod Örnekleri
local MemoryStoreService = game:GetService("MemoryStoreService")
local hashMap = MemoryStoreService:GetHashMap("HashMap1")
local key = "User_1234"
local value = 1000
local expiration = 30
local setSuccess, setError = pcall(function()
return hashMap:SetAsync(key, value, expiration)
end)
if not setSuccess then
warn(setError)
end
local removeSuccess, removeError = pcall(function()
hashMap:RemoveAsync(key)
end)
if removeSuccess then
print("Remove succeeded!")
else
warn(removeError)
end
SetAsync
Hashing tablosunda bir anahtarın değerini ayarlar, mevcut değerleri yazıyor.
Parametreler
Yapılandırılacak değerin sahibi olan anahtar.
ayarladeğer.
Öğe saniye içinde sona eriyor, sonra öğe otomatik olarak hash haritasından kaldırılır. Maksimum erime süresi 45 gün (3,888,000 saniye) dir.
Dönüşler
Kod Örnekleri
local MemoryStoreService = game:GetService("MemoryStoreService")
local hashMap = MemoryStoreService:GetHashMap("HashMap1")
local key = "User_1234"
local value = 1000
local expiration = 30
local setSuccess, setError = pcall(function()
return hashMap:SetAsync(key, value, expiration)
end)
if setSuccess then
print("Set succeeded!")
else
warn(setError)
end
UpdateAsync
Bir anahtarın değerini bir hachiz haritasından alır ve sizi yeni bir değere günceler.
Bu yöntem mevcut anahtar değerini alır ve bir dönüşüm işlevine geçer, bu da öğenin yeni değerini döndürür, bu istisnalar dahil:
- Anahtar mevcut değilse, eski değer işlevinize geçerli olur.
- Eğer işlev nil döndürürse güncelleme iptal edilir.
Yeni değer sadece anahtar güncellenmediğinde (örneğin, farklı bir oyun sunucusu tarafından) kaydedilir. Eğer değer o anda güncellenirse, dönüşüm işlevi en son güncellenmiş öğe değeriyle çağrılır. Bu döngü, değer başarıyla kaydedilenecekse veya dönüşüm işlevi hiçbir öğe için yeniden çağrılmayacak ş
Parametreler
güncellegereken anahtarın değeri.
Sunmuş olduğunuz dönüşüm işlevi. Bu işlev eski değerleri bir giriş olarak alır ve yeni değeri döndürür.
Öğe saniye içinde sona eriyor, sonra öğe otomatik olarak hash haritasından kaldırılır. Maksimum erime süresi 45 gün (3,888,000 saniye) dir.
Dönüşler
Dönüştürme işlevi tarafından döndürilen son değer.
Kod Örnekleri
local MemoryStoreService = game:GetService("MemoryStoreService")
local hashMap = MemoryStoreService:GetHashMap("ResourceInventory")
local function contributeResources(itemResource, addedCount)
local success, newResourceCount = pcall(function()
return hashMap:UpdateAsync(itemResource, function(resource)
resource = resource or {count = 0}
resource.count = resource.count + addedCount
-- ensure we don't exceed the maximum resource count
if resource.count > 500 then
resource.count = 500
end
return resource
end, 1200)
end)
if success then
print(newResourceCount)
end
end
contributeResources("myResource", 50)