키 값 쌍을 저장하는 해시 맵 , 순위 맵과 비슷하게, 키 값 쌍을 저장하는 해시 맵을 메모리에 액세스수 있습니다. 순위 맵과 달리 키 값 쌍을 저장하는 해시 맵은 순위 보장
제한
해시 맵에는 128자의 키 크기 제한과 32KB의 값 크기 제한이 있습니다.
그렇지 않으면 해시 맵은 다른 메모리 스토어 데이터 구조와 동일한 API 요청 및 메모리 할당량 제한을 사용합니다.
해시 맵 생성
해시 맵을 가져오려면 MemoryStoreService:GetHashMap() 이름을 가진 해시 맵을 호출하십시오. 이 이름은 경험 내에서 글로벌이므로 이 이름을 사용하는 모든 스크립트에서 동일한 해시 맵에 액세스할 수 있습니다.
해시 맵 생성
local MemoryStoreService = game:GetService("MemoryStoreService")local hashMap = MemoryStoreService:GetHashMap("HashMap1")
해시 맵을 받으면 다음 함수 중 하나를 호출하여 해시 맵에 데이터를 읽거나 쓸 수 있습니다.After you get a hash map, call any of the following functions to read or write data in it:
함수 | 액션 |
---|---|
MemoryStoreHashMap:SetAsync() | 새로운 키를 추가하거나 키가 이미 있는 경우 값을 덮어씁니다. |
MemoryStoreHashMap:GetAsync() | Read 특정 키를 읽습니다. |
MemoryStoreHashMap:ListItemsAsync() | List 해시 맵에 아이템을 목록화합니다. |
MemoryStoreHashMap:UpdateAsync() | 업데이트 해시 맵에서 키를 검색한 후 키의 값을 업데이트합니다. |
MemoryStoreHashMap:RemoveAsync() | 키를 해시 맵에서 제거합니다. |
데이터 추가 또는 덮어쓰기
새 키를 추가하거나 해시 맵의 키 값을 덮어쓸 때 MemoryStoreHashMap:SetAsync() 를 호출하여 키의 이름, 값 및 만료 시간을 지정합니다. 메모리는 키가 만료되면 자동으로 정리됩니다. 최대 만료 시간은 3,8
해시 맵에 데이터 추가
local MemoryStoreService = game:GetService("MemoryStoreService")
local hashMap = MemoryStoreService:GetHashMap("HashMap1")
local setSuccess, _ = pcall(function()
return hashMap:SetAsync("User_1234", 1000, 30)
end)
if setSuccess then
print("Set succeeded.")
end
데이터 가져오기
특정 키와 관련된 값을 가져올 수 있거나 해시 맵에 있는 여러 키 값 쌍을 가져올 수 있습니다.
키 하나로 데이터 가져오기
해시 맵에서 키와 관련된 값을 가져오려면 MemoryStoreHashMap:GetAsync() 를 호출하여 키 이름을 가진 키를 가져옵니다.
해시 맵에서 특정 키 가져오기
local MemoryStoreService = game:GetService("MemoryStoreService")
local hashMap = MemoryStoreService:GetHashMap("HashMap1")
local setSuccess, _ = pcall(function()
return hashMap:SetAsync("User_1234", 1000, 30)
end)
if setSuccess then
print("Set succeeded.")
end
local item
local getSuccess, getError = pcall(function()
item = hashMap:GetAsync("User_1234")
end)
if getSuccess then
print(item)
else
warn(getError)
end
여러 키 값 쌍으로 데이터 가져오기
해시 맵의 모든 키 값 쌍을 단일 작업으로 구매하려면 MemoryStoreHashMap:ListItemsAsync() 를 호출하여 원하는 페이지 크기로 키를 리스트합니다. 이 함수는 모든 기존 키를 페이지 방식으로 나열합니다. 예를 들어, 다음 코드 샘플은 해시 맵에서 최대 32개의 항목을 검색합
해시 맵에 항목 나열
local MemoryStoreService = game:GetService("MemoryStoreService")
local hashMap = MemoryStoreService:GetHashMap("HashMap1")
-- 아이템 목록을 얻으세요, 32개의 아이템을 한 번에
local success, pages = pcall(function()
return hashMap:ListItemsAsync(32)
end)
if success then
while true do
-- 현재 페이지 가져오기
local entries = pages:GetCurrentPage()
-- 페이지에 있는 모든 키 값 쌍을 반복
for _, entry in ipairs(entries) do
print(entry.key .. " : " .. tostring(entry.value))
end
-- 마지막 페이지에 도달했는지 확인하십시오
if pages.IsFinished then
break
else
print("----------")
-- 다음 페이지로 이동
pages:AdvanceToNextPageAsync()
end
end
end
데이터 업데이트
해시 맵에서 키의 값을 검색하고 업데이트하려면, MemoryStoreHashMap:UpdateAsync() 와 키 이름 , 콜백 함수를 호출하여 키를 업데이트하고, 2>만료 시간2> 을 초과하는 섹unden에 대해 섹션을 업데이트합니다.
대부분의 경험에서 여러 서버가 동시에 키를 업데이트하고 값을 변경할 수 있습니다. 작성 시 UpdateAsync() 을 사용하면 업데이트하기 전에 항상 최신 값을 변경하므로 입력 값으로 최신 값을 읽을 수 있습니다.
예를 들어, 다음 코드 샘플은 공유 인벤토리에 있는 자원의 리소스 수를 업데이트합니다. UpdateAsync() 은 모든 플레이어 기여가 이 공유 인벤토리로 이동하도록 하며, 이 기여가 동시에 이루어지더라도 최대 500개의 리소스 수를 제한합니다. 이
공유 인벤토리에 있는 자원에 대한 자원 수를 업데이트하는 중
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
-- 최대 리소스 수를 초과하지 않도록 하세요
if resource.count > 500 then
resource.count = 500
end
return resource
end, 1200)
end)
if success then
print(newResourceCount)
end
end
Class.MemoryStoreIlluminate:UpdateAsync()|UpdateAsync()의 대기 시간은 GetAsync() 및 SetAsync()와 비슷합니다. 제한이 없는 경우.
콘텐션이 발생하면 시스템이 이 세 가지 중 하나가 발생할 때까지 작업을 자동으로 다시 시도합니다. 작업이 성공하거나 콜백 함수가 null을 반환하거나 최대 재시도 수에 도달하면 콜콘이 발생합니다. 콜콘이 발생하면 충돌이 발생합니다.
데이터 제거
모든 데이터를 메모리 스토어 맵에서 삭제하는 경우 MemoryStoreHashMap:RemoveAsync()를 사용할 수 있습니다.
키 제거
해시 맵에서 키를 제거하려면 MemoryStoreHashMap:RemoveAsync() 에 키 이름 Class.MemoryStoreOperations:RemoveAsync() 를 사용하십시오.
해시 맵에서 키 제거
local MemoryStoreService = game:GetService("MemoryStoreService")
local hashMap = MemoryStoreService:GetHashMap("HashMap1")
local setSuccess, _ = pcall(function()
return hashMap:SetAsync("User_1234", 1000, 30)
end)
if setSuccess then
print("Set succeeded.")
end
local removeSuccess, removeError = pcall(function()
hashMap:RemoveAsync("User_1234")
end)
if not removeSuccess then
warn(removeError)
end
모든 데이터 삭제
해시 맵에 있는 모든 데이터를 삭제하려면 MemoryStoreHashMap:ListItemsAsync() 를 전체 목록하고, MemoryStoreHashMap:RemoveAsync() .
해시 맵의 모든 데이터 삭제
local MemoryStoreService = game:GetService("MemoryStoreService")
local hashMap = MemoryStoreService:GetHashMap("HashMap1")
-- 아이템 목록을 얻으세요, 32개의 아이템을 한 번에
local success, pages = pcall(function()
return hashMap:ListItemsAsync(32)
end)
if success then
while true do
-- 현재 페이지 가져오기
local entries = pages:GetCurrentPage()
local removeSuccess = true
local removeError = nil
-- 페이지에 있는 모든 키 값 쌍을 반복
for _, entry in ipairs(entries) do
print(entry.key .. " : " .. tostring(entry.value))
removeSuccess, removeError = pcall(function()
hashMap:RemoveAsync(entry.key)
end)
if not removeSuccess then
warn(removeError)
end
end
-- 마지막 페이지에 도달했는지 확인하십시오
if pages.IsFinished then
print("Finished deleting all data.")
break
else
print("----------")
-- 다음 페이지로 이동
pages:AdvanceToNextPageAsync()
end
end
end