แฮชแมพหน่วยความจำ

*เนื้อหานี้แปลโดยใช้ AI (เวอร์ชัน Beta) และอาจมีข้อผิดพลาด หากต้องการดูหน้านี้เป็นภาษาอังกฤษ ให้คลิกที่นี่

แฮชแมพ คล้ายกับแผนที่ที่จัดระเบียบช่วยให้คุณเก็บข้อมูลในหน่วยความจำเป็นคู่ของคีย์-ค่า ต่างจากแผนที่ที่จัดระเบียบ แฮชแมพไม่มีการรับรองการจัดลำดับ โครงสร้างข้อมูลนี้มีประโยชน์สำหรับกรณีที่ต้องการบัฟเฟอร์ข้อมูลที่เรียบง่ายและการเข้าถึงอย่างรวดเร็ว เช่น สินค้าคงคลังที่แชร์ บ้านประมูลจริง และอื่นๆ แฮชแมพจัดการการแบ่งพาร์ติชันข้อมูลของคุณโดยอัตโนมัติและมีประโยชน์มากหากคุณมีคีย์มากกว่า 1,000 คีย์ สำหรับพื้นที่คีย์ที่เล็กกว่า เราขอแนะนำ แผนที่ที่จัดระเบียบ.

ข้อจำกัด

แฮชแมพมีขีดจำกัดขนาดคีย์ที่ 128 อักขระ และขีดจำกัดขนาดค่าที่ 32 KB.

โดยทั่วไปแล้ว แฮชแมพจะใช้ ข้อจำกัดการเรียก API และ โควต้าหน่วยความจำ เช่นเดียวกับโครงสร้างข้อมูลหน่วยความจำอื่นๆ.

รับแฮชแมพ

เพื่อให้ได้แฮชแมพ ให้เรียกใช้ MemoryStoreService:GetHashMap() โดยใช้ชื่อสำหรับแฮชแมพ ชื่อนี้เป็นแบบทั่วโลกภายในเกม ดังนั้นคุณสามารถเข้าถึงแฮชแมพเดียวกันในสคริปต์ใดๆ โดยใช้ชื่อนี้

การรับแฮชแมพ

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

หลังจากคุณได้รับแฮชแมพแล้ว เรียกใช้ฟังก์ชันใดๆ ต่อไปนี้เพื่ออ่านหรือเขียนข้อมูลในนั้น:

ฟังก์ชันการกระทำ
MemoryStoreHashMap:SetAsync()เพิ่ม คีย์ใหม่หรือเขียนทับค่าหากคีย์มีอยู่แล้ว.
MemoryStoreHashMap:GetAsync()อ่าน คีย์เฉพาะ.
MemoryStoreHashMap:ListItemsAsync()แสดงรายการ รายการในแฮชแมพ.
MemoryStoreHashMap:UpdateAsync()ปรับปรุง ค่าของคีย์หลังจากดึงมันจากแฮชแมพ.
MemoryStoreHashMap:RemoveAsync()ลบ คีย์จากแฮชแมพ.

สำหรับเอกสารประกอบเชิงลึกเกี่ยวกับแต่ละฟังก์ชัน ดูที่ MemoryStoreHashMap.

เพิ่มหรือลบข้อมูล

เพื่อเพิ่มคีย์ใหม่หรือลบค่าของคีย์ในแฮชแมพ ให้เรียกใช้ MemoryStoreHashMap:SetAsync() โดยใช้คีย์ ชื่อ, ค่า, และ เวลาในการหมดอายุเป็นวินาที แรมจะทำการทำความสะอาดโดยอัตโนมัติหลังจากที่คีย์หมดอายุ เวลาหมดอายุสูงสุดคือ 3,888,000 วินาที (45 วัน)

การเพิ่มข้อมูลในแฮชแมพ

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("การตั้งค่าเสร็จสิ้น.")
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("การตั้งค่าเสร็จสิ้น.")
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() โดยใช้คีย์ ชื่อ, ฟังก์ชันย้อนกลับในการปรับปรุงคีย์, และ เวลาในการหมดอายุในวินาที

สำหรับเกมส่วนใหญ่ เซิร์ฟเวอร์หลายตัวสามารถปรับปรุงคีย์เดียวกันพร้อมกันและเปลี่ยนค่าได้ เนื่องจาก 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

ความหน่วงสำหรับ UpdateAsync() จะคล้ายกับ GetAsync() และ SetAsync() เว้นแต่ว่าจะมีการแข่งขันเกิดขึ้น

เมื่อเกิดการแข่งกัน ระบบจะลองทำงานอัตโนมัติเสมอจนกว่าจะเกิดเหตุการณ์หนึ่งในสามเหตุการณ์นี้: การดำเนินการประสบความสำเร็จ, ฟังก์ชันย้อนกลับคืนค่า 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("การตั้งค่าเสร็จสิ้น.")
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("เสร็จสิ้นการลบข้อมูลทั้งหมด.")
break
else
print("----------")
-- ไปยังหน้าถัดไป
pages:AdvanceToNextPageAsync()
end
end
end
©2026 Roblox Corporation. Roblox, โลโก้ Roblox และ Powering Imagination เป็นส่วนหนึ่งของเครื่องหมายการค้าที่จดทะเบียน และไม่ได้จดทะเบียนของเราในสหรัฐฯ และประเทศอื่นๆ