怎么统计redis的hash中的某个字段个数,在线等
迷茫
迷茫 2017-04-24 16:00:39
0
5
907

存储的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,找遍了资料,没有发现相关的文档

迷茫
迷茫

业精于勤,荒于嬉;行成于思,毁于随。

membalas semua(5)
仅有的幸福

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:

redis> ZADD age 10 jack
(integer) 0
redis> ZADD age 15 tom
(integer) 0
redis> ZADD age 25 peter
(integer) 0

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:

ZRANGEBYSCORE age 10 20

Jika data yang anda ingin simpan bukan rentetan mudah dan tiada cara untuk menyimpannya secara langsung sebagai kunci, terdapat dua penyelesaian:

  1. 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 gunakan json.loads untuk memulihkannya apabila mengeluarkannya daripada redis.

  2. 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.

phpcn_u1582

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? !

Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan
Tentang kita Penafian Sitemap
Laman web PHP Cina:Latihan PHP dalam talian kebajikan awam,Bantu pelajar PHP berkembang dengan cepat!