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