內存存取地圖

*此內容是使用 AI(Beta 測試版)翻譯,可能含有錯誤。若要以英文檢視此頁面,請按一下這裡

哈希圖 ,與排序圖相似,讓您存儲在內存中的鑰匙值對。與排序圖不同,它們不會提供排序保證。這個資料結構對於需要簡單資料儲存和快速存使用權 通行權 存取的情況,例如共享道具欄、物理拍品房屋等,很有用。對於小於

限制

hash 地圖的鑰匙尺寸為 128 個字元,值尺寸為 32 KB。

否則,哈希地圖會使用相同的 API 請求記憶體存取 限制,作為其他記憶體存取資料結構的限制。

取得哈希地圖

要取得哈希地圖,請使用 Class.MemoryStoreService:Get:`Class.MemoryStoreService:Get:` 與哈希地圖的名稱。名稱在體驗中全球,因此您可以使用此名稱來在任何使用此名稱的腳本上存取相同的哈希地圖。

取得哈希地圖

local MemoryStoreService = game:GetService("MemoryStoreService")
local hashMap = MemoryStoreService:GetHashMap("HashMap1")

在您獲得哈希地圖後,請使用以下任何一項功能來閱取或寫入資料:

函數行動
MemoryStoreHashMap:SetAsync()新增 一個新的鑰匙,或覆蓋已存在的鑰匙值。
MemoryStoreHashMap:GetAsync()閱讀特定鑰鍵。
MemoryStoreHashMap:ListItemsAsync()清單 項目在哈希圖中。
MemoryStoreHashMap:UpdateAsync()更新 從擷取哈希地圖後的鑰匙值。
MemoryStoreHashMap:RemoveAsync()從擷取地圖中移除 一個鑰匙。

添加或覆蓋資料

要在散列樹中新增新鑰匙,或在鑰匙的值上寫入更改,請使用 MemoryStoreHashMap:SetAsync() 使用鑰匙 名稱 ,它的 和一個 1> 過期時間1> 在秒鐘後自動清理。當鑰

將資料添加到哈希圖

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

使用多個鑰匙值對取得資料

要從掌握圖獲得所有關鍵值對象,請使用 Class.MemoryStore:`Class.MemoryStoreream` 與指定頁面大小 Class.MemoryStoreream:ListItemsAsync() 來獲得所有關鍵值。此功能會以頁面的方式列出所有關鍵值。例如,以下代碼示例會從掌握圖獲得最多 32 個關鍵值。

在Hash Map中列出項目

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() 使用鑰匙 名稱 ,一個 回歸函數 更新鑰鍵,以及在秒鐘內的 1> expiry time1>。

對於大多數體驗,多個伺服器可以同時更新相同的鑰匙並且變更值。作為 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.MemoryStore 的延遲與 GetAsync() 的延遲相似,除非有容量。

當發生壓力時,系統會自動重試操作,直到其中的一個發生:操作成功,呼叫函數返回 nil,或最大重試次數已達到。 如果系統達到最大重試次數,它會返回一個矛盾。

移除資料

您可以使用 MemoryStoreHashMap:RemoveAsync() 來兩者都從哈希圖中移除一個鑰匙,並且在記憶體存取圖中刪除所有資料。

移除鑰匙

要從摘要圖中移除鑰匙,請使用 MemoryStoreHashMap: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