存储的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,找遍了资料,没有发现相关的文档
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 :
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 :
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 :
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 utiliserjson.loads
pour le restaurer lors de sa suppression de Redis.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.
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 =.=
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é.
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
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 ? !