存储的hash这样的:
user:1 => id:1, name: 'a', age:30, sex:1
user:2 => id:2, name: 'b', age:18, sex:0
user:3 => id:3, name: 'c', age:22, sex:1
user:4 => id:4, name: 'd', age:10, sex:0
我想统计sex为1的用户有多少个?
另外再复杂一点,以age分组,分成三组[age<15, 15<=age<25, age>=25],分别统计用用户的个数
刚入redis,找遍了资料,没有发现相关的文档
Ciri-ciri Redis menentukan bahawa ia tidak sesuai untuk operasi statistik. Kerana tiada bahasa pertanyaan berstruktur seperti SQL. Berikut ialah penyelesaian untuk anda, tetapi anda perlu mengubah suai kaedah organisasi data anda:
Dalam redis, jika anda benar-benar mempunyai keperluan statistik, anda boleh menggunakan SortedSet. Setiap kunci dalam set tersusun sepadan dengan skor, dan nilai boleh diisih mengikut skor.
Contohnya:
Kod di atas memasukkan tiga keping data ke dalam set diisih umur, menggunakan umur tiga orang sebagai skor. Jika anda ingin mengira lingkungan umur antara 10-20, seperti berikut:
Jika data yang anda ingin simpan bukan rentetan mudah dan tiada cara untuk menyimpannya secara langsung sebagai kunci, terdapat dua penyelesaian:
Tukar data kepada rentetan dalam format json sebagai kunci, dan kemudian pulihkan rentetan json kepada format yang boleh disokong oleh kod apabila mengeluarkannya. Sebagai contoh, dalam python, anda boleh menggunakan
json.dumps
untuk menukar kamus kepada rentetan, dan kemudian gunakanjson.loads
untuk memulihkannya apabila mengeluarkannya daripada redis.Gunakan id sebagai kunci, dan kemudian gunakan cincang lain atau struktur data lain untuk menyimpan maklumat pengguna sebenar. Dengan cara ini, anda perlu terlebih dahulu mengetahui id berdasarkan medan statistik, dan kemudian menyemak maklumat lengkap berdasarkan id, yang memerlukan dua pertanyaan.
Tetapi penyelesaian di atas hanya terpakai jika anda hanya mempunyai satu medan untuk statistik, seperti umur yang anda nyatakan. Jika anda mempunyai pelbagai keperluan statistik, mesti ada penyelesaian secara teori, tetapi saya fikir anda harus mempertimbangkan sama ada anda benar-benar perlu menggunakan redis untuk menyelesaikan kerja ini. Lagipun, senario penggunaan redis mengehadkan keupayaannya untuk melaksanakan statistik sekompleks dan pelbagai seperti SQL. Anda boleh mempertimbangkan NoSQL lain, seperti mongodb.
Adalah paling bijak untuk memilih alatan berdasarkan senario penggunaan anda, daripada hanya melihat segala-galanya sebagai paku jika anda mempunyai tukul di tangan anda.
Adakah ia perlu dikendalikan dalam redis-cli? Untuk mengakses redis dalam bahasa lain, anda boleh mengeluarkan pengguna:* dan kemudian melintasi kiraan.
Saya baru mula menggunakan redis =.=
Pertanyaan Redis hanya perlu melalui kekunci itu boleh dipadankan mengikut peraturan.
Jangan paksa, cuma tukar kepada pangkalan data hubungan.
Atau tambahkan kunci khusus untuk statistik setiap kali anda memasukkan data.
INCR('seks:1')
INCR('seks:1')
INCR('umur:0')
INCR('umur:1')
INCR('umur:2')
0/1/2 mewakili kumpulan umur
Jika anda tidak membuat aplikasi dan hanya mengetahui berapa banyak nilai kunci cincang tertentu, ia sangat mudah nama kunci Hkey akan menyenaraikan semua medan, dan kemudian redis akan memberikan anda nombor isihan secara automatik, iaitu a kira, kan? !