แผนที่ความแรง คล้ายกับแผนที่เรียงลําดับให้คุณเก็บข้อมูลในหน่วยความจําเป็นเป็นคู่คีย์-ค่าไม่เหมือนแผนที่ที่เรียงลําดับพวกเขาไม่รับประกันการจัดเรียงโครงสร้างข้อมูลนี้มีประโยชน์สำหรับกรณีที่ต้องการการเก็บข้อมูลแบบง่ายและการเข้าถึงอย่างรวดเร็ว เช่น คลังสินค้าร่วม บ้านประมูลทางกายภาพ และอื่นๆแผนที่ความแยกแยะจะจัดการการแบ่งปันข้อมูลโดยอัตโนมัติและมีประโยชน์มากหากคุณมีกุญแจมากกว่า 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
เพิ่มหรือเขียนทับข้อมูล
เพื่อเพิ่มกุญแจใหม่หรือเขียนค่ากุญแจในแผนที่ฮาชใหม่ โทร ด้วยกุญแจ ชื่อ , ค่า ของมัน และเวลาหมดอายุ ในวินาทีหน่วยความจําจะทำความสะอาดโดยอัตโนมัติเมื่อกุญแจหมดอายุเวลาหมดอายุสูงสุดคือ 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("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
อัปเดตข้อมูล
เพื่อดึงค่าของกุญแจจากแผนที่คีย์และอัปเดตมัน โทร ด้วยชื่อกุญแจ และฟังก์ชันการโทรกลับ เพื่ออัปเดตกุญแจ และเวลาหมดอายุ ในไม่กี่วินาที
สำหรับประสบการณ์ส่วนใหญ่ หลายเซิร์ฟเวอร์สามารถอัปเดตคีย์เดียวพร้อมกันและเปลี่ยนค่าได้เนื่องจาก UpdateAsync() เสมอแก้ไขค่าล่าสุดก่อนอัปเดตคุณควรใช้มันเพื่ออ่านค่าล่าสุดเป็นอินพุตสําหรับฟังก์ชัน callback ของคุณ
ตัวอย่างโค้ดต่อไปนี้อัปเดตจํานวนทรัพยากรของทรัพยากรในสินค้าร่วมกัน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() เว้นแต่จะมีการแข่งขัน
เมื่อเกิดการแข่งขันขึ้น ระบบจะพยายามทำการดำเนินการอีกครั้งจนกว่าหนึ่งในสามเหตุการณ์เหล่านี้จะเกิดขึ้น: การดำเนินการประสบความสำเร็จ, ฟังก์ชัน callback จะกลับมา 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