Map thảo luận , tương tự như map sort, cho phép bạn lưu trữ dữ liệu trong bộ nhớ như cặp giá trị chìa khóa. Giống như sort map, chúng không đảm bảo độ bảo mật. Đối với các khối dữ liệ
Giới hạn
Các bản hiệu hóa map có giới hạn quy mô của chìa khóa 128 ký tự và giới hạn quy mô của giá trị 32 KB.
Nếu không, API Request và Memory Quota giới hạn giống như các giải pháp lưu trữ dữ liệu khác.
Lấy bản đồ hành động
Để có được bản đồ hashr, gọi Class.MemoryStoreService:Get:`Class.MemoryStoreService:Get:`Class.MemoryStoreService:Get:`Class.MemoryStoreService:Get` với một tên cho hashr. Tên là toàn cầu trong trải nghiệm, so you can access the same hashr map on any script using this name.
Lấy bản đồ hành động
local MemoryStoreService = game:GetService("MemoryStoreService")local hashMap = MemoryStoreService:GetHashMap("HashMap1")
Sau khi bạn nhận được bảng hiệu, gọi bất kỳ trong số các chức năng sau đây để đọc hoặc viết dữ liệu vào nó:
Hàm | Hành động |
---|---|
MemoryStoreHashMap:SetAsync() | Thêm một chìa khóa mới hoặc đổi đổi giá trị nếu chìa khóa đã tồn tại. |
MemoryStoreHashMap:GetAsync() | Đọc một chìa khóa cụ thể. |
MemoryStoreHashMap:ListItemsAsync() | Danh sách các mục trong bản đồ hash. |
MemoryStoreHashMap:UpdateAsync() | Cập nhật giá trị của một chìa khóa sau khi lấy nó từ bảng hiệu lệnh. |
MemoryStoreHashMap:RemoveAsync() | Loại bỏ một chìa khóa khỏi bảng hiệu hành động. |
Thêm hoặc Đổi dữ liệu
Để thêm một chìa khóa mới hoặc đổi mã của một chìa khóa trong map hiệu suất, gọi MemoryStoreHashMap:SetAsync() với tên chìa khóa name, giá trị value và thời gian 2> expiration2> trong gi
Thêm Dữ liệu vào Bản đồHash
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
Lấy dữ liệu
Bạn có thể nhận giá trị được liên kết với một chìa khóa cụ thể hoặc có thể nhận nhiều cặp giá trị chìa khóa trong bảng hiệu lệnh.
Lấy dữ liệu với một chìa khóa
Để nhận giá trị được liên kết với một chìa khóa từ bảng hiệu dữ liệu, gọi MemoryStoreHashMap:GetAsync() với tên chìa khóa tên .
Lấy một Chìa khóa cụ thể từ bản đồHash
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
Lấy dữ liệu với các cặp giá trị nhiều chìa khóa
Để nhận tất cả các cặp giá trị chìa khóa từ bảng hash như một mệnh lệnh duy nhất, gọi MemoryStoreHashMap:ListItemsAsync() với kích thước trang mong muốn. Đây là hàm liệt kê tất cả các chìa khóa hiện có trong một cấu hình trang. Ví dụ, mẫu mã sau đâ
Danh sách các mục trong một bản đồHash
local MemoryStoreService = game:GetService("MemoryStoreService")
local hashMap = MemoryStoreService:GetHashMap("HashMap1")
-- Nhận danh sách vật phẩm, 32 vật phẩm tại một thời điểm
local success, pages = pcall(function()
return hashMap:ListItemsAsync(32)
end)
if success then
while true do
-- Lấy trang hiện tại
local entries = pages:GetCurrentPage()
-- Lặp lại tất cả các cặp giá trị chìa khóa trên trang
for _, entry in ipairs(entries) do
print(entry.key .. " : " .. tostring(entry.value))
end
-- Kiểm tra xem trang cuối cùng đã đạt được
if pages.IsFinished then
break
else
print("--------")
-- Điều hướng đến trang tiếp theo
pages:AdvanceToNextPageAsync()
end
end
end
Cập nhật dữ liệu
Để lấy giá trị của một chìa khóa từ bảng hiệp nhận và cập nhật nó, gọi MemoryStoreHashMap:UpdateAsync() với tên chìa khóa name, một hàm gọi để cập nhật chìa khóa, và một thời gian hết hạn trong giây lát.
Đối với hầu hết các trải nghiệm, nhiều máy chủ có thể cập nhật cùng một chìa khóa và thay đổi giá trị. Khi UpdateAsync() luôn luôn điều chỉnh giá trị mới nhất trước khi cập nhật, bạn nên sử dụng nó để đọc giá trị mới nhấ
Ví dụ, mẫu mã code sau đây cập nhật số lượng tài nguyên của tài nguyên trong một kho tài nguyên chung. UpdateAsync() đảm bảo rằng tất cả các đóng góp của người chơi sẽ được đưa vào kho này, ngay cả khi
Cập nhật Số lượng tài nguyên cho một tài nguyên trong một túi đồ chung
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
-- đảm bảo chúng tôi không vượt quá số lượng tối đa tài nguyên
if resource.count > 500 then
resource.count = 500
end
return resource
end, 1200)
end)
if success then
print(newResourceCount)
end
end
Độ trễ cho UpdateAsync() tương tự như GetAsync() và SetAsync() trừ khi có chứa đựng.
Khi xảy ra điều kiện ngăn chặn, hệ thống sẽ tự động thử lại hoạt động cho đến khi một trong ba này xảy ra: hoạt động thành công, hàm chuỗi trả về nil hoặc số lần thử tối đa đã đạt được. Nếu hệ thống đạt đến số lần thử tối đa, nó sẽ trở lại một cuộc xung độ
Loại bỏ dữ liệu
Bạn có thể sử dụng MemoryStoreHashMap:RemoveAsync() để thực hiện cả hai công việc này, bao gồm xóa một key khỏi bản đồ hash và xóa tất cả dữ liệu trong bản đồ store memory.
Loại bỏ một Chìa khóa
Để xóa một chìa khói khỏi bản đồ hash, gọi MemoryStoreHashMap:RemoveAsync() với một chìa khóa tên .
Loại bỏ một Chìa khóa từ Bản đồHash
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
Xóa tất cả dữ liệu
Để xóa tất cả dữ liệu trong một bản đồ hash, liệt kê tất cả các mặt hàng của bạn với MemoryStoreHashMap:ListItemsAsync() , sau đó loại bỏ chúng với MemoryStoreHashMap:RemoveAsync() .
Xóa tất cả các dữ liệu trong một bản đồHash
local MemoryStoreService = game:GetService("MemoryStoreService")
local hashMap = MemoryStoreService:GetHashMap("HashMap1")
-- Nhận danh sách vật phẩm, 32 vật phẩm tại một thời điểm
local success, pages = pcall(function()
return hashMap:ListItemsAsync(32)
end)
if success then
while true do
-- Lấy trang hiện tại
local entries = pages:GetCurrentPage()
local removeSuccess = true
local removeError = nil
-- Lặp lại tất cả các cặp giá trị chìa khóa trên trang
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
-- Kiểm tra xem trang cuối cùng đã đạt được
if pages.IsFinished then
print("Finished deleting all data.")
break
else
print("--------")
-- Điều hướng đến trang tiếp theo
pages:AdvanceToNextPageAsync()
end
end
end