Maison  >  Questions et réponses  >  le corps du texte

怎么统计redis的hash中的某个字段个数,在线等

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

迷茫迷茫2756 Il y a quelques jours917

répondre à tous(5)je répondrai

  • 仅有的幸福

    仅有的幸福2017-04-24 16:02:39

    Les caractéristiques de Redis déterminent qu'il n'est pas adapté aux opérations statistiques. Parce qu'il n'existe pas de langage de requête structuré comme SQL. Voici une solution pour vous, mais vous devez modifier votre méthode d'organisation des données :

    Dans Redis, si vous avez vraiment des besoins statistiques, vous pouvez utiliser SortedSet. Chaque clé de l'ensemble ordonné correspond à un score, et les valeurs peuvent être triées en fonction du score.

    Par exemple :

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

    Le code ci-dessus insère trois éléments de données dans l'ensemble trié par âge, en utilisant l'âge des trois personnes comme score. Si vous souhaitez compter la tranche d'âge entre 10 et 20 ans, comme suit :

    ZRANGEBYSCORE age 10 20

    Si la donnée que vous souhaitez stocker n'est pas une simple chaîne et qu'il n'y a aucun moyen de la stocker directement sous forme de clé, il existe deux solutions :

    1. Convertissez les données en une chaîne au format json comme clé, puis restaurez la chaîne json dans un format que le code peut prendre en charge lors de sa suppression. Par exemple, en python, vous pouvez utiliser json.dumps pour convertir le dictionnaire en chaîne, puis utiliser json.loads pour le restaurer lors de sa suppression de Redis.

    2. Utilisez l'identifiant comme clé, puis utilisez un autre hachage ou une autre structure de données pour stocker les informations utilisateur réelles. De cette façon, vous devez d'abord connaître l'identifiant en fonction du champ statistique, puis vérifier les informations complètes en fonction de l'identifiant, ce qui nécessite deux requêtes.

    Mais la solution ci-dessus ne s'applique que si vous ne disposez que d'un seul champ pour les statistiques, comme l'âge que vous avez mentionné. Si vous avez plusieurs besoins statistiques, il doit y avoir une solution en théorie, mais je pense que vous devriez vous demander si vous avez vraiment besoin d'utiliser Redis pour terminer ce travail. Après tout, les scénarios d'utilisation de Redis limitent sa capacité à effectuer des statistiques aussi complexes et diverses que SQL. Vous pouvez envisager d'autres NoSQL, tels que mongodb.

    Il est plus sage de choisir des outils en fonction de vos scénarios d'utilisation, plutôt que de simplement considérer tout comme un clou si vous avez un marteau à la main.

    répondre
    0
  • 伊谢尔伦

    伊谢尔伦2017-04-24 16:02:39

    Est-ce que cela doit être géré dans redis-cli ? Pour accéder à Redis dans d'autres langues, vous pouvez supprimer user:* puis parcourir le décompte.
    Je viens de commencer à utiliser redis =.=

    répondre
    0
  • 世界只因有你

    世界只因有你2017-04-24 16:02:39

    La requête Redis ne doit être effectuée que via la clé. La clé peut être mise en correspondance selon les règles. Vous pouvez faire quelque chose sur la clé.

    répondre
    0
  • phpcn_u1582

    phpcn_u15822017-04-24 16:02:39

    Ne forcez pas, passez simplement à une base de données relationnelle.

    Ou ajoutez une clé spécifiquement pour les statistiques chaque fois que vous insérez des données.
    INCR('sexe:1')
    INCR('sexe:1')

    INCR('age:0')
    INCR('age:1')
    INCR('age:2')
    0/1/2 représente la tranche d'âge

    répondre
    0
  • 仅有的幸福

    仅有的幸福2017-04-24 16:02:39

    Si vous ne faites pas de demande et savez simplement combien de valeurs possède une certaine clé de hachage, c'est très simple. Hkey keyname listera tous les champs, puis redis vous donnera automatiquement un numéro de tri, qui est un. compte, non ? !

    répondre
    0
  • Annulerrépondre