Peta penyimpanan memori

*Konten ini diterjemahkan menggunakan AI (Beta) dan mungkin mengandung kesalahan. Untuk melihat halaman ini dalam bahasa Inggris, klik di sini.

Peta hash , mirip dengan peta yang disortir, memungkinkan Anda menyimpan data dalam memori sebagai pasangan kunci-nilai.Tidak seperti peta yang disortir, mereka tidak mempertahankan jaminan perintah.Struktur data ini berguna untuk kasus yang membutuhkan penyimpanan data sederhana dan akses cepat, seperti inventaris bersama, rumah lelang fisik, dan banyak lagi.Peta hash secara otomatis menangani pembagian data Anda dan sangat berguna jika Anda memiliki lebih dari 1.000 kunci.Untuk ruang kunci yang lebih kecil, kami sarankan peta diurutkan.

Batasan

Peta hash memiliki batas ukuran kunci 128 karakter dan batas ukuran nilai 32 KB.

Jika tidak, hash peta menggunakan permintaan API yang sama dan batas kualitas memori seperti struktur data penyimpanan memori lainnya.

Dapatkan peta hash

Untuk mendapatkan peta hash, panggil MemoryStoreService:GetHashMap() dengan nama untuk peta hash.Namanya global dalam pengalaman, sehingga Anda dapat mengakses peta hash yang sama di setiap skrip menggunakan nama ini.

Mendapatkan Peta Hash

local MemoryStoreService = game:GetService("MemoryStoreService")
local hashMap = MemoryStoreService:GetHashMap("HashMap1")

Setelah Anda mendapatkan peta hash, hubungi salah satu fungsi berikut untuk membaca atau menulis data di dalamnya:

FungsiTindakan
MemoryStoreHashMap:SetAsync()Tambahkan kunci baru atau menulis ulang nilai jika kunci sudah ada.
MemoryStoreHashMap:GetAsync()Baca kunci tertentu.
MemoryStoreHashMap:ListItemsAsync()Daftar item dalam peta hash.
MemoryStoreHashMap:UpdateAsync()Perbarui nilai kunci setelah mengambilnya dari peta hash.
MemoryStoreHashMap:RemoveAsync()Hapus kunci dari peta hash.

Untuk dokumentasi mendalam tentang setiap fungsi, lihat MemoryStoreHashMap .

Tambahkan atau tulis ulang data

Untuk menambahkan kunci baru atau menghapus nilai kunci di peta hash, panggil dengan kunci nama , nilai nya , dan waktu kedaluwarsa di detik.Memori secara otomatis membersihkan setelah kunci kedaluwarsa.Waktu kedaluwarsa maksimum adalah 3.888.000 detik (45 hari).

Menambahkan Data ke Map 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

Dapatkan data

Anda dapat mendapatkan nilai yang terkait dengan kunci tertentu atau mendapatkan beberapa pas nilai kunci dalam peta hash.

Dapatkan data dengan satu unit

Untuk mendapatkan nilai yang terkait dengan satu kunci dari peta hash, panggil MemoryStoreHashMap:GetAsync() dengan kunci nama .

Mendapatkan Kunci Khusus 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

Dapatkan data dengan beberapa pas kunci-nilai

Untuk mendapatkan semua pas kunci-nilai dari peta hash sebagai satu operasi, panggil MemoryStoreHashMap:ListItemsAsync() dengan ukuran halaman yang diinginkan.Fungsi ini daftar semua kunci yang ada dengan cara halaman.Sebagai contoh, sampel kode berikut mengambil hingga 32 item dari peta hash.

Mencantumkan item di Peta Hash

local MemoryStoreService = game:GetService("MemoryStoreService")
local hashMap = MemoryStoreService:GetHashMap("HashMap1")
-- Dapatkan daftar item, 32 item sekaligus
local success, pages = pcall(function()
return hashMap:ListItemsAsync(32)
end)
if success then
while true do
-- Dapatkan halaman saat ini
local entries = pages:GetCurrentPage()
-- Berulang melalui semua pasangan kunci-nilai di halaman
for _, entry in ipairs(entries) do
print(entry.key .. " : " .. tostring(entry.value))
end
-- Periksa apakah halaman terakhir telah tercapai
if pages.IsFinished then
break
else
print("----------")
-- Lanjut ke halaman berikutnya
pages:AdvanceToNextPageAsync()
end
end
end

Mengupdate data

Untuk mengambil nilai kunci dari peta hash dan memperbaruinya, panggil dengan nama kunci , fungsi panggil kembali untuk memperbarui unit, dan waktu kedaluwarsa dalam detik.

Untuk sebagian besar pengalaman, beberapa server dapat memperbarui kunci yang sama secara bersamaan dan mengubah nilainya.Sebagai UpdateAsync() selalu memodifikasi nilai terbaru sebelum diperbarui, Anda harus menggunakannya untuk membaca nilai terbaru sebagai input untuk fungsi callback Anda.

Sebagai contoh, sampel kode berikut memperbarui hitungan sumber daya dari sumber daya di inventaris bersama. UpdateAsync() memastikan bahwa semua kontribusi pemain akan masuk ke inventaris bersama ini, bahkan jika kontribusi ini dilakukan secara bersamaan.Dalam fungsi ini, ia juga memaksakan hitungan sumber maksimum 500.

Memperbarui Hitungan Sumber Daya untuk Sumber Daya di Inventaris Bersama

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
-- pastikan kami tidak melebihi hitungan sumber daya maksimum
if resource.count > 500 then
resource.count = 500
end
return resource
end, 1200)
end)
if success then
print(newResourceCount)
end
end

Kelambatan untuk UpdateAsync() adalah mirip dengan GetAsync() dan SetAsync() kecuali ada persaingan.

Ketika kontes terjadi, sistem secara otomatis mencoba kembali operasi sampai salah satu dari tiga ini terjadi: operasi berhasil, fungsi panggil balasan kembali nil , atau jumlah maksimum upaya dicapai.Jika sistem mencapai jumlah maksimum upaya ulang, ia akan mengembalikan konflik.

Menghapus data

Anda dapat menggunakan MemoryStoreHashMap:RemoveAsync() untuk menghapus satu kunci dari peta hash dan menghapus semua data di peta penyimpanan memori.

Hapus unit

Untuk menghapus kunci dari peta hash, panggil dengan nama kunci .

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

Hapus 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 Map Hash

local MemoryStoreService = game:GetService("MemoryStoreService")
local hashMap = MemoryStoreService:GetHashMap("HashMap1")
-- Dapatkan daftar item, 32 item sekaligus
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
-- Berulang melalui semua pasangan kunci-nilai 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 tercapai
if pages.IsFinished then
print("Finished deleting all data.")
break
else
print("----------")
-- Lanjut ke halaman berikutnya
pages:AdvanceToNextPageAsync()
end
end
end