แผนที่ความทรงจําสโตร์แฮช

*เนื้อหานี้แปลโดยใช้ 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

เพิ่มหรือเขียนทับข้อมูล

เพื่อเพิ่มกุญแจใหม่หรือเขียนค่ากุญแจในแผนที่ฮาชใหม่ โทร ด้วยกุญแจ ชื่อ , ค่า ของมัน และเวลาหมดอายุ ในวินาทีหน่วยความจําจะทำความสะอาดโดยอัตโนมัติเมื่อกุญแจหมดอายุเวลาหมดอายุสูงสุดคือ 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