แผนที่แฮชสำหรับที่เก็บข้อมูลในหน่วยความจำ

*เนื้อหานี้แปลโดยใช้ 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 เป็นส่วนหนึ่งของเครื่องหมายการค้าที่จดทะเบียน และไม่ได้จดทะเบียนของเราในสหรัฐฯ และประเทศอื่นๆ