Peta hash , mirip dengan peta sort, memungkinkan Anda menyimpan data dalam memori sebagai pasangan nilai kunci. Berbeda dengan peta sort, mereka tidak menyimpan jaminan pemeringkatan. Struktur data ini berguna untuk kasus yang memerlukan data caching sederhana dan akses cepat, seperti inventaris bersama, rumah
Membatasi
Peta hash memiliki batas ukuran kunci 128 karakter dan batas ukuran nilai 32 KB.
Jika tidak, peta hash menggunakan batas permintaan API dan memori quota yang sama dengan struktur data memori lainnya.
Mendapatkan Peta Hash
Untuk mendapatkan peta hash, panggil Class.MemoryStoreService:Get:`Class.MemoryStoreService:Get:` dengan nama untuk peta hash. Nama adalah global dalam pengalaman, sehingga Anda dapat mengakses peta hash yang sama di setiap script menggunakan nama ini.
Mendapatkan Peta Hash
local MemoryStoreService = game:GetService("MemoryStoreService")local hashMap = MemoryStoreService:GetHashMap("HashMap1")
Setelah Anda mendapatkan peta hash, panggil salah satu dari fungsi berikut untuk membaca atau menulis data di dalamnya:
Fungsi | Tindakan |
---|---|
MemoryStoreHashMap:SetAsync() | Tambahkan kunci baru atau tulis ulang nilai jika kunci sudah ada. |
MemoryStoreHashMap:GetAsync() | Baca kunci tertentu. |
MemoryStoreHashMap:ListItemsAsync() | Daftar item dalam peta hash. |
MemoryStoreHashMap:UpdateAsync() | Update nilai kunci setelah mengambilnya dari peta hash. |
MemoryStoreHashMap:RemoveAsync() | Hapus kunci dari peta hash. |
Menambahkan atau Menulis Ulang Data
Untuk menambahkan kunci baru atau menulis ulang nilai kunci di peta hash, panggil MemoryStoreHashMap:SetAsync() dengan kunci nama , nilai nya dan waktu 1> kedaluwarsa1> dalam detik. Memori secara otomatis membersihkan setelah kunci kedaluwarsa. Waktu
Menambahkan Data ke Peta 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
Mendapatkan Data
Anda dapat mendapatkan nilai yang terkait dengan kunci tertentu atau mendapatkan beberapa pas nilai kunci di peta hash.
Mendapatkan Data dengan Satu Kunci
Untuk mendapatkan nilai yang terkait dengan satu kunci dari peta hash, panggil MemoryStoreHashMap:GetAsync() dengan kunci nama .
Mendapatkan Kunci Tertentu dari Peta 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
Mendapatkan Data dengan Pasangan Key-Value
Untuk mendapatkan semua pasangan nilai kunci dari peta hash sebagai satu operasi, panggil MemoryStoreHashMap:ListItemsAsync() dengan ukuran halaman yang diinginkan. Fungsi ini mengumpulkan semua kunci yang ada dalam halaman bertepuk. Misalnya, contoh kode berikut mengambil hingga 32 item dari peta hash.
Menulis item di Peta Hash
local MemoryStoreService = game:GetService("MemoryStoreService")
local hashMap = MemoryStoreService:GetHashMap("HashMap1")
-- Dapatkan daftar item, 32 item pada satu waktu
local success, pages = pcall(function()
return hashMap:ListItemsAsync(32)
end)
if success then
while true do
-- Dapatkan halaman saat ini
local entries = pages:GetCurrentPage()
-- Iterate melalui semua pasangan nilai kunci di halaman
for _, entry in ipairs(entries) do
print(entry.key .. " : " .. tostring(entry.value))
end
-- Periksa apakah halaman terakhir telah dicapai
if pages.IsFinished then
break
else
print("------")
-- Lanjutkan ke halaman berikutnya
pages:AdvanceToNextPageAsync()
end
end
end
Mengaktualisasi Data
Untuk mengambil nilai kunci dari peta hash dan menyimpannya, panggil MemoryStoreHashMap:UpdateAsync() dengan kunci nama , fungsi panggilan untuk menyimpan unit, dan waktu 1> kedaluwarsa1> dalam detik.
Untuk kebanyakan pengalaman, beberapa server dapat memperbarui kunci yang sama secara bersamaan dan mengubah nilainya. Sebagai UpdateAsync() selalu mengubah nilai terbaru sebelum diperbarui, Anda harus menggunakannya untuk membaca nilai terbaru sebagai input untuk fungsi panggilan Anda.
Misalnya, contoh kode berikut meningkatkan jumlah sumber daya sebuah sumber daya di inventaris bersama. UpdateAsync() memastikan bahwa semua kontribusi pemain akan menuju ke inventaris bersama ini, bahkan jika kontribusi ini dilakukan secara bersamaan. Dalam fungsi ini, itu juga mengekang batas maksimum sumber daya 500.
Meng更新资源计数器以资源在共享库存中
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
-- astikan kita tidak melebihi jumlah sumber daya maksimum
if resource.count > 500 then
resource.count = 500
end
return resource
end, 1200)
end)
if success then
print(newResourceCount)
end
end
Latensi untuk UpdateAsync() mirip dengan GetAsync() dan SetAsync() kecuali jika ada konten.
Ketika kontensi terjadi, sistem secara otomatis mencoba kembali operasi sampai salah satu dari tiga ini terjadi: operasi berhasil, fungsi panggilan kembali bernilai nol, atau jumlah maksimum retries dicapai. Jika sistem mencapai jumlah retries maksimum, itu menunjukkan konflik.
Menghapus Data
Anda dapat menggunakan Class.MemoryStore:`menghapus kunci dari peta hash dan menghapus semua data di peta mapa memori.
Menghapus Kunci
Untuk menghapus kunci dari peta hash, panggil MemoryStoreHashMap:RemoveAsync() dengan nama kunci nama .
Hapus Kunci dari Peta 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
Menghapus Semua Data
Untuk menghapus semua data di peta hash, daftarkan semua item Anda dengan MemoryStoreHashMap:ListItemsAsync() , lalu hapus mereka dengan MemoryStoreHashMap:RemoveAsync() .
Hapus semua data di Peta Hash
local MemoryStoreService = game:GetService("MemoryStoreService")
local hashMap = MemoryStoreService:GetHashMap("HashMap1")
-- Dapatkan daftar item, 32 item pada satu waktu
local success, pages = pcall(function()
return hashMap:ListItemsAsync(32)
end)
if success then
while true do
-- Dapatkan halaman saat ini
local entries = pages:GetCurrentPage()
local removeSuccess = true
local removeError = nil
-- Iterate melalui semua pasangan nilai kunci di halaman
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
-- Periksa apakah halaman terakhir telah dicapai
if pages.IsFinished then
print("Finished deleting all data.")
break
else
print("------")
-- Lanjutkan ke halaman berikutnya
pages:AdvanceToNextPageAsync()
end
end
end