Pertimbangkan sama ada boleh untuk menyimpan data pengguna sepenuhnya dalam redis dan bukannya menggunakan pangkalan data seperti SQL.
Masalah pertama ialah cara mendapatkan semula apabila pengguna memasukkan nama pengguna dan kata laluan.
Menggunakan arahan kekunci adalah mustahil, ia amat mengerikan.
Struktur yang dibayangkan adalah seperti berikut:
每一个用户数据存储为一个hash类型:
key user:info:unique-identification(int or uuid)
hash-key-email: hash-value-email
hash-key-cellphone: hash-value-cellphone
hash-key-password: hash-value-password
hash-key-nickname: hash-value-nickname
hask-key-right01: hash-value-right01
……
用hash类型存储email=>unique-identification检索数据
key email:index
hash-key-valueOfEmial: hash-value-unique-identification
用hash类型存储cellphone=>unique-identification检索数据
key cellphone:index
hash-key-valueOfCellphone: hash-value-unique-identification
Tentukan sama ada pengguna memasukkan e-mel atau telefon bimbit
Gunakan arahan hget untuk mendapatkan pengenalan unik yang sepadan daripada data yang sepadan
Jika hget memperoleh data, gunakan user:unique-identification sebagai kunci untuk mendapatkan data pengguna
Bandingkan kata laluan, jika pengesahan adalah konsisten, buat sesi dan kuki yang sepadan, dan log masuk selesai.
Pertimbangkan masalah yang anda akan hadapi:
Masa respons hget boleh diterima Ini adalah lebih cepat daripada perintah kunci untuk mendapatkan semula Kami belum mempertimbangkan sama ada LUA boleh digunakan untuk melengkapkan pengesahan log masuk dengan satu akses.
Namun, storan data telah menjadi satu lagi masalah yang sukar diselesaikan Jika terdapat 3 juta pengguna, hanya satu e-mel=> data perolehan pengenalan unik akan menjadi kira-kira 300M Jika terdapat 10 juta pengguna, kedua-dua dapatan itu akan menjadi kira-kira 2G data.
Sila beritahu saya jika terdapat struktur yang lebih munasabah untuk menyelesaikan masalah ini. Mengharapkan nasihat pakar.
Secara peribadi, saya fikir adalah tidak munasabah untuk menggunakan redis untuk penyimpanan, tetapi ia boleh dilaksanakan.