Tokens Penyimpanan

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

MemoryStoreService adalah layanan data berkepanjangan tinggi dan rendah yang menyediakan akses data ke dalam memori yang dapat diakses dari semua server dalam sesi hidup. Memori Stores cocok untuk data yang sering dan ephemeral yang berubah dengan cepat dan tidak perlu bertahan, karena mereka le

Struktur Data

Alih-alih mengakses data mentah secara langsung, tumpukan memori memiliki tiga struktur data dasar yang dibagikan di seluruh server untuk pemrosesan cepat: sortir peta, antrian, dan hash map. Setiap struktur data ini cocok untuk beberapa kasus penggunaan:

  • Pertemuan berdasarkan keterampilan - Simpan informasi pengguna, seperti levelketerampilan, di antara server berbagi, dan gunakan server lobi untuk menjalankan pertemuan secara berkala.
  • Perdagangan dan penawaran server-server multi-server - Aktifkan perdagangan universal antara berbagai server, di mana pengguna dapat bertaruh pada item dengan harga yang berubah saat nyata, dengan peta sortiran dari kumpulan nilai kunci.
  • Papan peringkat global - Toko dan update peringkat pengguna di papan peringkat yang dibagikan di dalam peta yang diurutkan .
  • Inventaris bersama-sama - Simpan item inventaris dan statistik di peta berbagi , di mana pengguna dapat menggunakan item inventaris bersama-sama dengan satu sama lain.
  • Cache untuk Data yang Tetap - Sinkronisasi dan salinan data tetap Anda di toko data ke toko memori hash map yang dapat bertindak sebagai cache dan meningkatkan kinerja pelaksanaanAnda.

umum, jika Anda perlu mengakses data berdasarkan unittertentu, gunakan peta hash. Jika Anda memerlukan data untuk diburuhkan, gunakan peta sortasi. Jika Anda memerlukan proses data dalam urutan tertentu, gunakan antrian.

Batas dan Kuota

Untuk menjaga pelaksanaandan kinerja sistem, memori memiliki batas penggunaan data untuk ukuran memori, permintaan API, dan ukuran struktur data.

Toko-toko memori memiliki kebijakan pengusiran berdasarkan waktu kedaluwarsa, juga dikenal sebagai waktu hidup (TTL). Item diusir setelah kedaluwarsa, dan quota memori dibebaskan untuk entri baru. Saat Anda menekan batas memori, semua permintaan tulis berikutnya gagal sampai item kadaluarsa atau Anda secara manual menghapusnya.

Memori Kapasitas Quota

Memori quota membatasi jumlah total memori yang dikonsumsi pengalaman. Ini bukan nilai tetap. Sebaliknya, itu berubah dari waktu ke waktu tergantung pada jumlah pengguna dalam pengalaman berdasarkan rumus berikut: 64KB + 1KB * [jumlah pengguna] . Quota berlaku pada tingkat pengalaman, bukan levelserver.

Ketika pengguna bergabung dengan pengalaman, quota memori tambahan tersedia segera. Ketika pengguna meninggalkan pengalaman, quota tidak mengurangi segera. Ada periode pembaruan quota delapan hari sebelum quota mengevaluasi ke nilai yang lebih rendah.

Setelah pengalaman Anda menghantam kapasitas memori, tulisan API yang meningkatkan kapasitas memori selalu gagal. Permintaan yang menurunkan atau tidak mengubah kapasitas memori masih berhasil.

Dengan dashboard observability, Anda dapat melihat ukuran memori quota pengalaman Anda secara real time menggunakan grafik Penggunaan Memori .

Membatasi Permintaan API

Untuk batas permintaan API, ada quota unit permintaan yang berlaku untuk semua panggilan MemoryStoreService API. Quota adalah 1000 + 100 * [jumlah pengguna concurrent] request units per minute.

Sebagian besar panggilan API hanya mengkonsumsi satu unit permintaan, dengan beberapa pengecualian:

  • MemoryStoreSortedMap:GetRangeAsync()

    Mengkonsumsi unit berdasarkan jumlah item yang dikembalikan. Misalnya, jika metode ini mengembalikan 10 item, panggilan dihitung sebagai 10 unit permintaan. Jika ia mengembalikan jawaban kosong, ia dihitung sebagai satu unit permintaan.

  • MemoryStoreQueue:ReadAsync()

    Mengkonsumsi unit berdasarkan jumlah item yang dikembalikan, seperti MemoryStoreSortedMap:GetRangeAsync(), tetapi mengkonsumsi unit tambahan setiap dua detik saat membaca. Spesifikasikan waktu pembacaan maksimal dengan parameter waitTimeout.

  • MemoryStoreHashMap:UpdateAsync()

    Mengkonsumsi setidaknya dua unit.

  • MemoryStoreHashMap:ListItemsAsync()

    Mengkonsumsi [jumlah partisi yang dianalisis] + [item yang dikembalikan] unit.

Jumlah permintaan juga diterapkan pada tingkat pengalaman, bukan tingkat server. Ini memberikan fleksibilitas untuk menyalokan permintaan di antara server asalkan tingkat permintaan total tidak melebihi batas. Jika Anda melebihi batas, Anda menerima respons kesalahan saat layanan mengendalikan permintaan Anda.

Dengan fitur ke observabilitas yang tersedia, Anda dapat melihat quota unit permintaan pengalaman Anda secara real time.

Batas-batas Ukuran Struktur Data

Untuk peta atau antrian tunggal yang diurutkan, batas ukuran dan item berikut berlaku:

  • Jumlah maksimum item: 1,000,000
  • Ukuran total maksimum (termasuk kunci untuk peta sort): 100 MB

Batas Per-Partition

Lihat Batas Per-Partition.

Praktik Terbaik

Untuk menjaga pola penggunaan memori Anda maksimal dan menghindari menghantam batas, ikuti praktik terbaik ini:

  • Hapus item yang diproses. Bersihkan item bacaan dengan metode MemoryStoreQueue:RemoveAsync() untuk antrian dan MemoryStoreSortedMap:RemoveAsync() untuk map-map sortiran dapat mengosongkan memori dan menjaga struktur data up-to-date.

  • Tetapkan waktu kedaluwarsa untuk frame waktu terkecil saat menambahkan data. Meskipun waktu kedaluwarsa default adalah 45 hari untuk kedua Class.MemoryStoreQueue:AddAsync() dan Class.MemoryStoreSortedMap:SetAsync() , menetapkan waktu yang paling pendek dapat secara otomatis membersihkan data lama untuk mencegah mereka mengisi

    • Jangan menyimpan banyak data dengan kedaluwarsa panjang, karena berisiko melebihi quota memori Anda dan potensi menyebabkan masalah yang dapat menghancurkan seluruh pengalaman Anda.
    • Selalu hapus item yang tidak diperlukan secara eksplisit atau tetapkan batas waktu item pendek.
    • Biasanya, Anda harus menggunakan delete yang jelas untuk melepaskan memori dan kedaluwarsa item sebagai mekanisme keamanan untuk mencegah item yang tidak digunakan menyediakan memori selama periode waktu yang panjang.
  • Hanya menyimpan nilai yang diperlukan dalam memori.

    Sebagai contoh, untuk pengalaman rumah lelang, Anda hanya perlu menjaga tawaran tertinggi. Anda dapat menggunakan MemoryStoreQueue:UpdateAsync() di satu kunci untuk menjaga tawaran tertinggi daripada menyimpan semua bid di struktur data Anda.

  • Gunakan backoff eksponensial untuk membantu tetap di bawah batas permintaan API.

    Misalnya, jika Anda menerima DataUpdateConflict, Anda mungkin mencoba kembali setelah dua detik, kemudian empat, delapan, dll. alih-alih mengirim permintaan ke MemoryStoreService untuk mendapatkan jawaban yang benar.

  • Membagi struktur data raksasa menjadi beberapa bagian yang lebih kecil dengan pembagian .

    Sering lebih mudah untuk mengelola data di struktur yang lebih kecil daripada menyimpan semuanya dalam satu struktur data besar. Pendekatan ini juga dapat membantu menghindari batas penggunaan dan tingkat tingkat tinggi. Misalnya, jika Anda memiliki peta sort yang menggunakan prefiks untuk kunci-kuncinya, pertimbangkan untuk memisahkan masing-masing prefiks ke dalam peta sort mereka

  • Kompres nilai yang disimpan.

    Misalnya, pertimbangkan menggunakan algoritma LZW untuk mengurangi ukuran nilai yang disimpan.

Observabilitas

Dashboard Ketanggihan Memantau menyediakan洞察 dan analitik untuk memantau dan mengatasi masalah penggunaan memori Anda. Dengan pembaruan grafik dalam waktu nyata pada berbagai aspek penggunaan memori dan permintaan API, Anda dapat melacak pola penggunaan memori Anda, melihat kuota yang diberikan secara real time, dan mengidentifikasi statusmasalah untuk meningkatkan kinerja.

Tabel berikut menyediakan dan menjelaskan semua kode status dari API yang tersedia di Dashboard Kejelasan Hitung Jumlah Status dan Permintaan oleh API x Status tabel. Untuk informasi lebih lanjut tentang cara menyelesaikan kesalahan ini, lihat Troubleshooting. Untuk batas atau batas khusus yang ter

Kode StatusDeskripsi
SuksesSukses.
Memori Over限Mengesampingkan batas ukuran memori tingkat struktur data (100MB).
Konflik Pembaruan DataKonflik karena pembaruan bersamaan.
DiterimaTolakTidak diizinkan untuk mengakses data pengalaman. Permintaan ini tidak mengkonsumsi unit permintaan atau menggunakan kuota.
Kesalahan InternalKesalahan internal.
Permintaan Tidak ValidPermintaan tidak memiliki informasi yang diperlukan atau memiliki informasi yang tidak valid.
ItemStruktur Data di Luar BatasMelampaui batas item tingkat tatanan data (1M).
Tidak ada item yang ditemukanTidak ada item yang ditemukan di MemoryStoreQueue:ReadAsync() atau MemoryStoreSortedMap:UpdateAsync(). ReadAsync() polling setiap 2 detik dan mengembalikan kode status ini sampai menemukan item di antrian.
Penghapusan DataStructureRequestsOverLimitMelebihi batas permintaan tingkat level data (100.000 unit permintaan per menit).
Limit Permintaan PembagianMelampaui batas unit permintaan pembagian.
Limit Permintaan TotalMelebihi batas unit permintaan tingkat alam semesta.
Memori TotalMelampaui batas memori tingkat alam semesta.
ItemValueSizeTooBesarUkuran nilai melebihi batas (32KB).

Tabel berikut menyediakan kode negara dari pihak klien, yang saat ini tidak tersedia di Dashboard Keberhasilan.

Kode StatusDeskripsi
Kesalahan InternalKesalahan internal.
Tempat Tidak DiterbitkanAnda harus mempublikasi tempat ini untuk menggunakan MemoryStoreService.
Akses Klien Tidak ValidMemoryStoreService harus dipanggil dari server.
Waktu Kedaluwarsa Tidak ValidWaktu 'kesedihan' harus antara 0 dan 3,888,000.
Permintaan Tidak ValidTidak dapat mengubah nilai menjadi json.
Permintaan Tidak ValidTidak dapat mengubah sortKey menjadi nomor atau string yang valid.
Transformasi Callback GagalGagal mengaktifkan fungsi panggilan transformasi.
Permintaan TerbatasPermintaan Tokens Luar Angkasa terbaru menghantam satu atau lebih batas.
PerbaruiKonflikJumlah maksimum gagal lagi.

Menyelesaikan Masalah

Tabel berikut menyediakan dan menjelaskan solusi yang direkomendasikan untuk setiap kode status balasan:

KesalahanOpsi solusi masalah
DataStructureCommands / PartitionCommands

  • Tambahkan cache lokal dengan menyimpan informasi ke variabel lain dan memeriksa kembali setelah jangka waktu tertentu, seperti 30 detik.
  • Gunakan grafik Request Count by

    • Menguraikan struktur data Anda jika Anda menerima jumlah besar DataStructureCommandsLimit / PartitionCommandsLimit jawaban.
    • Gunakan backoff eksponensial untuk menemukan tingkat permintaan yang masuk akal untuk dikirim.

Limit Permintaan Total
ItemStruktur Data di Luar Batas
Memori Over限
Memori Total
Konflik Pembaruan Data

    Gunakan waktu pembaruan singkat antara permintaan untuk menghindari banyak permintaan yang mengirimkan kunci yang sama pada saat yang sama. Untuk map yang sort, gunakan fungsi pembaruan Class.MemoryStoreQueue:RemoveAsync() untuk menghilangkan kesalahan. * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *

Kesalahan Internal

    Periksa halaman status Roblox ini File a bug report ini menggambarkan masalah dengan Universe ID Anda.

Permintaan Tidak Valid
  • Pastikan bahwa Anda mencakup parameter yang benar dan valid dalam permintaan Anda. Contoh parameter yang tidak valid termasuk:
    • Sebuah string kosong
    • Sebuah string yang melebihi batas panjangnya
ItemValueSizeTooBesar
  • Pecahkan atau bagi nilai item menjadi beberapa kunci.
    • Untuk mengatur kunci yang berumpet, sort mereka secara alfabetik dengan menambahkan prefix ke unit.
  • Mengkompresi atau men-Encoding nilai yang disimpan.

Menguji dan Men-Debug di Studio

Data di MemoryStoreService dibagi antara Studio dan produksi, jadi mengubah data di Studio tidak mengubah perilaku produksi. Ini berarti bahwa panggilan API Anda dari Studio tidak mengakses data produksi, sehingga Anda dapat dengan aman menguji memori dan fitur baru sebelum masuk ke produksi.

Pengujian studio memiliki batas dan kuota yang sama dengan produksi. Untuk kuota yang dihitung berdasarkan jumlah pengguna, kuota yang dihasilkan dapat sangat kecil karena Anda adalah satu-satunya pengguna untuk Studio testing. Saat menguji dari Studio, Anda mungkin juga perhatikan latensi yang lebih tinggi dan tingkat kesalahan yang lebih tinggi dibandingkan dengan p

Untuk informasi tentang cara men-debug toko memori pada pengalaman langsung atau saat menguji di studio, gunakan Konsol Pengembang.