Lewati ke isi

Pengembangan Skrip / Penyimpanan Sederhana DFF.STORE

DFF.STORE digunakan untuk menyimpan data KV skala kecil secara persisten, dengan struktur scope + key -> value. Saat menulis, data akan otomatis diserialisasi ke JSON; saat membaca, data otomatis dideserialisasi dan mempertahankan tipe JSON.

Kueri kompleks atau data dalam jumlah besar sebaiknya menggunakan Konektor basis data. Data yang berumur pendek, sering diakses, dan dapat diterima dalam bentuk string sebaiknya menggunakan DFF.CACHE.

Parameter Umum

Parameter Wajib / Nilai default Keterangan
key Wajib Nama kunci, maksimal 256 karakter
value Wajib Objek yang dapat diserialisasi JSON
expires None Jumlah detik kedaluwarsa; None berarti tidak pernah kedaluwarsa
scope ID Script saat ini Ruang nama, maksimal 256 karakter
pattern "*" Pencocokan nama kunci; * mencocokkan panjang berapa pun, ? mencocokkan satu karakter

API

Metode Nilai kembali / Keterangan
set(key, value, expires=None, not_exists=False, scope=None) Menulis satu nilai, mengembalikan None
mset(key_values, expires=None, not_exists=False, scope=None) Menulis sekaligus (batch), mengembalikan None
get(key, scope=None) / DFF.STORE(key, scope=None) Mengembalikan nilai; mengembalikan None jika tidak ada atau sudah kedaluwarsa
mget(keys, scope=None) Mengembalikan {key: value}
getall(scope=None) Mengembalikan semua data di bawah Scope
keys(pattern='*', scope=None) Mengembalikan daftar Key yang cocok
get_pattern(pattern='*', scope=None) Mengembalikan data yang cocok {key: value}
delete(key, scope=None) Menghapus Key yang ditentukan
delete_pattern(pattern='*', scope=None) Menghapus Key yang cocok
ref(key, scope=None, default=None) Membuat referensi tertunda untuk parameter DFF.API yang mendukung nilai dinamis
Contoh
1
2
3
4
5
6
7
8
9
DFF.STORE.set('user:user-001', {'name': 'User A'}, scope='users')
user = DFF.STORE.get('user:user-001', scope='users')

DFF.STORE.mset({
    'user:user-002': {'name': 'User B'},
    'user:user-003': {'name': 'User C'},
}, scope='users')

users = DFF.STORE.get_pattern('user:*', scope='users')

mget(...) akan menyertakan Key dari setiap permintaan; nilai yang hilang atau sudah kedaluwarsa adalah None; get_pattern(...) hanya menyertakan rekaman yang cocok dan masih valid.

Saat menggunakan not_exists=True, Key yang baru saja kedaluwarsa masih dapat menghalangi pembuatan. set(...) dan mset(...) sama-sama mengembalikan None; untuk memastikan hasil pembuatan, lakukan pembacaan setelah penulisan. Penulisan batch dieksekusi item per item, bukan transaksi all-or-nothing.

Nilai expires yang hilang atau falsy berarti tidak kedaluwarsa; penulisan berikutnya tanpa waktu kedaluwarsa akan menghapus waktu kedaluwarsa sebelumnya. Kode lama mungkin menggunakan parameter expire; kode baru sebaiknya konsisten menggunakan expires.

Referensi Dinamis

DFF.STORE.ref(...) mengembalikan referensi dinamis yang dapat digunakan untuk parameter delayed_cron_job, timeout, expires, dan queue pada DFF.API. Jika scope dihilangkan, referensi menggunakan Scope REF khusus, bukan Scope Script saat ini; biasanya Anda harus secara eksplisit meneruskan Scope yang sama dengan penulisnya.

Penghapusan pola secara default akan mencocokkan seluruh Scope

Pola default delete_pattern() adalah '*'. Kecuali Anda benar-benar perlu menghapus seluruh Scope, Anda harus secara eksplisit meneruskan pattern, dan terlebih dahulu melihat Key yang cocok melalui keys(...).

Jangan gunakan DFF.STORE untuk menyimpan file besar atau daftar besar dalam jangka panjang.