Class.MemoryStoreService 내의 해시 맵에 액세스할 수 있습니다. 해시 맵은 키 값을 임의의 값(최대 크기 제한 참조 - 메모리 스토어)과 연관하는 컬렉션 항목입니다. 키에는 정렬 보장이 없습니다.
요약
메서드
해시 맵에 있는 키의 값을 검색합니다.
해시 맵의 항목을 열거하려는 경우 MemoryStoreHashMapPages 개체를 반환합니다.
해시 맵에서 항목을 제거합니다.
해시 맵에 있는 키의 값을 설정합니다.
해시 맵에서 키의 값을 검색하고 새 값으로 업데이트할 수 있습니다.
속성
메서드
GetAsync
해시 맵에 있는 키의 값을 검색합니다.
매개 변수
가져오다키의 값입니다.
반환
키가 없는 경우 값, 또는 없음.
코드 샘플
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
해시 맵의 항목을 열거하려는 경우 MemoryStoreHashMapPages 개체를 반환합니다. 유효한 범위는 1에서 200까지입니다.
매개 변수
반환할 수 있는 최대 항목 수입니다.
반환
Class.MemoryStore HashMapPages 인스턴스이며, 항목을 MemoryStoreHashMapPages 인스턴스로 열거합니다.
코드 샘플
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
해시 맵에서 항목을 제거합니다.
매개 변수
제거할 키입니다.
반환
코드 샘플
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
해시 맵에 키의 값을 설정하고 기존 값을 덮어씁니다.
매개 변수
설정할 값의 키입니다.
설정할 값입니다.
아이템 만료는 초 후, 이후에 아이템이 해시 맵에서 자동으로 제거됩니다. 최대 만료 시간은 45 일 (3,888,000 초)입니다.
반환
코드 샘플
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
해시 맵에서 키의 값을 검색하고 새 값으로 업데이트할 수 있습니다.
이 메서드는 기존 키 값을 검색하고 변환 함수에 전달하는 콜백 함수를 수락하며, 다음과 같은 예외가 있습니다.
- 키가 없으면 함수에 전달된 이전 값은 일반적으로 nil입니다.
- 함수가 null을 반환하면 업데이트가 취소됩니다.
새 값은 키가 업데이트되지 않은 경우에만 저장됩니다(예, 다른 게임 서버에 의해) 키가 읽음때부터 저장됩니다. 값이 변경된 경우 변환 함수는 최신 항목 값으로 호출됩니다. 이 사이클은 값이 성공적으로 저장된 경우나 변환 함수가 실행을 중단하도록 지정된 경우에만 반복됩니다.
매개 변수
업데이트할 값이 있는 키입니다.
제공하는 변환 함수. 이 함수는 이전 값을 입력으로 사용하고 새 값을 반환합니다.
아이템 만료는 초 후, 이후에 아이템이 해시 맵에서 자동으로 제거됩니다. 최대 만료 시간은 45 일 (3,888,000 초)입니다.
반환
변환 함수에서 반환된 마지막 값.
코드 샘플
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)