MemoryStoreHashMap

사용되지 않는 항목 표시

*이 콘텐츠는 AI(베타)를 사용해 번역되었으며, 오류가 있을 수 있습니다. 이 페이지를 영어로 보려면 여기를 클릭하세요.

만들 수 없음
복제되지 않음

Class.MemoryStoreService 내의 해시 맵에 액세스할 수 있습니다. 해시 맵은 키 값을 임의의 값(최대 크기 제한 참조 - 메모리 스토어)과 연관하는 컬렉션 항목입니다. 키에는 정렬 보장이 없습니다.

요약

메서드

속성

메서드

GetAsync

Variant
생성

해시 맵에 있는 키의 값을 검색합니다.

매개 변수

key: string

가져오다키의 값입니다.


반환

Variant

키가 없는 경우 값, 또는 없음.

코드 샘플

Getting data from a MemoryStore Hash Map

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
생성

해시 맵의 항목을 열거하려는 경우 MemoryStoreHashMapPages 개체를 반환합니다. 유효한 범위는 1에서 200까지입니다.

매개 변수

count: number

반환할 수 있는 최대 항목 수입니다.


반환

Class.MemoryStore HashMapPages 인스턴스이며, 항목을 MemoryStoreHashMapPages 인스턴스로 열거합니다.

코드 샘플

Listing items in a MemoryStore Hash Map

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

void
생성

해시 맵에서 항목을 제거합니다.

매개 변수

key: string

제거할 키입니다.


반환

void

코드 샘플

Removing data from a MemoryStore Hash Map

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

생성

해시 맵에 키의 값을 설정하고 기존 값을 덮어씁니다.

매개 변수

key: string

설정할 값의 키입니다.

value: Variant

설정할 값입니다.

expiration: number

아이템 만료는 초 후, 이후에 아이템이 해시 맵에서 자동으로 제거됩니다. 최대 만료 시간은 45 일 (3,888,000 초)입니다.


반환

코드 샘플

Adding data to a MemoryStore Hash Map

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

Variant
생성

해시 맵에서 키의 값을 검색하고 새 값으로 업데이트할 수 있습니다.

이 메서드는 기존 키 값을 검색하고 변환 함수에 전달하는 콜백 함수를 수락하며, 다음과 같은 예외가 있습니다.

  • 키가 없으면 함수에 전달된 이전 값은 일반적으로 nil입니다.
  • 함수가 null을 반환하면 업데이트가 취소됩니다.

새 값은 키가 업데이트되지 않은 경우에만 저장됩니다(예, 다른 게임 서버에 의해) 키가 읽음때부터 저장됩니다. 값이 변경된 경우 변환 함수는 최신 항목 값으로 호출됩니다. 이 사이클은 값이 성공적으로 저장된 경우나 변환 함수가 실행을 중단하도록 지정된 경우에만 반복됩니다.

매개 변수

key: string

업데이트할 값이 있는 키입니다.

transformFunction: function

제공하는 변환 함수. 이 함수는 이전 값을 입력으로 사용하고 새 값을 반환합니다.

expiration: number

아이템 만료는 초 후, 이후에 아이템이 해시 맵에서 자동으로 제거됩니다. 최대 만료 시간은 45 일 (3,888,000 초)입니다.


반환

Variant

변환 함수에서 반환된 마지막 값.

코드 샘플

Updating a Memory Store Hash Map

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)

이벤트