Apa konvensi penamaan normal untuk kunci di redis? Saya telah melihat nilai-nilai dipisahkan oleh: tetapi saya tidak yakin apa itu konvensi normal, atau mengapa.
Ya, tanda titik dua :
adalah konvensi saat penamaan kunci. Dalam tutorial ini pada situs web redis dinyatakan: Cobalah untuk tetap dengan skema. Misalnya "objek-jenis: id: bidang" bisa menjadi ide yang bagus, seperti di "pengguna: 1000: kata sandi". Saya suka menggunakan titik untuk bidang multi-kata, seperti di "komentar: 1234: reply.to".
Apakah Anda dapat meminta hanya awal kunci untuk mengembalikan semua pengguna?
Jika maksud Anda seperti meminta secara langsung untuk semua kunci yang dimulai dengan user:
ada perintah kunci untuk itu. Namun perintah ini harus digunakan hanya untuk tujuan debugging karena itu O (N) karena mencari melalui semua kunci yang disimpan dalam database.
Solusi yang lebih tepat untuk masalah ini adalah membuat kunci khusus, sebut saja namanya users
, yang akan menyimpan semua kunci pengguna, misalnya, dalam daftar atau mengatur struktur data.
scan
bukan opsi @EranH., itu adalah praktik terbaik untuk beralih tombol.scan
digunakan untuk secara bertahap beralih pada koleksi elemen.$redis->delete($redis->keys('user:password:*'));
Kami menggunakan titik dua (:) sebagai pemisah namespace dan hash (#) untuk id-bagian dari kunci, misalnya:
sumber
Sebuah konvensi sepertinya adalah titik dua (:) tapi saya seorang pengembang web jadi saya pribadi lebih suka slash (/) untuk separator. Slash sudah merupakan pemisah yang sangat penting di dalam URL yang dimaksudkan sebagai Uniform Resource Locators, jadi semacam kunci untuk sumber daya. Mengapa mengambil pendekatan berbeda dengan titik dua (:)? Apakah ada gunanya?
Pertimbangkan contoh ini:
Kami memiliki API tenang untuk objek mainan. Ada satu:
Di mana kita menyimpannya? Kami menggunakan Redis dan garis miring sehingga kuncinya jelas:
Ini adalah kunci unik untuk mainan itu. Kuncinya sekarang dapat digunakan juga di sisi klien:
Seorang pengguna meminta objek dengan kunci
toy/666
. Bagaimana cara mendapatkannya dari Redis? Contoh terkait Node.js:Tidak perlu mengubah garis miring menjadi titik dua dan sebaliknya. Nyaman, bukan begitu?
Catatan: selalu memastikan bahwa pengguna hanya dapat mengakses hal-hal yang Anda maksudkan. Pendekatan URL-to-key mentah di atas dapat mengambil
user/1/password
juga, seperti dicatat oleh komentator. Ini seharusnya tidak menjadi masalah jika Anda menggunakan Redis sebagai cache read-only publik.sumber
curl http://example.com/api/user/1/password
, atau serupa. (Katakan saja.)User#23:uploads:my/path/to/file.ext
Saya tidak tahu apakah benar-benar ada "praktik terbaik" yang meluas untuk penamaan kunci Redis.
Saya telah bereksperimen dengan menggunakan karakter ASCII NUL sebagai pemisah saya (karena Redis dan Python keduanya 8-bit clean). Ini terlihat agak jelek jika Anda melihat kunci mentah, tetapi idenya adalah menyembunyikannya di balik lapisan abstraksi. Simbol titik dua dan pipa adalah alternatif yang jelas selama komponen ruang nama Anda dijamin tidak akan menggunakannya atau Anda bersedia menyandikan setiap komponen sesuai kebutuhan. Namun, jika Anda akan menyandikannya, maka Anda ingin mengembangkan lapisan abstraksi dan menghindari melihat kunci mentah ... yang membawa saya kembali ke hanya menggunakan \ 0 dalam alasan saya.
Saya akan menarik melihat apakah ada pendapat lain yang diartikulasikan tentang ini.
sumber
Bagi pengguna kami, menurut saya HSET / HGET akan lebih cocok. Ada juga HKEYS perintah .
Semua perintah tersebut memiliki kompleksitas yang sama dengan GET / SET / KEYS, jadi mengapa tidak menggunakannya?
Anda dapat memiliki struktur ini kemudian:
atau:
Cukup ekstrak ID pengguna dan gunakan sebagai kunci hash. Saya pribadi lebih suka pendekatan ini karena rasanya lebih bagus dan Anda juga dapat dengan mudah meminta ID pengguna yang ada.
sumber