Maison > Questions et réponses > le corps du texte
hset user:1 score 100
hset user:2 socre 101
hset user:3 score 200
hset user:4 score 201
要找出socre最高的user,应该如何设计。
天蓬老师2017-04-22 09:01:10
hset ne peut pas être trié directement. Il existe une alternative pour obtenir l’équivalent du tri hset, qui consiste à utiliser la fonction sort. Sort ne peut généralement trier que des listes, des ensembles et des zsets, mais il peut être modifié. Le tri est utilisé comme suit :
Touche SORT [BY pattern] [LIMIT offset count] [GET pattern [GET pattern ...]] [ASC | DESC] [ALPHA] [STORE destination]
Faites attention à ses paramètres de stockage et de stockage. by est utilisé pour déterminer sur quel champ trier, et le magasin peut enregistrer les résultats du tri dans une liste. Vous pouvez d'abord enregistrer toutes les clés de hachage dans un ensemble, par exemple, le nom de clé de cet ensemble est myhashes, puis trier en fonction du champ de score de chaque élément de l'ensemble (c'est-à-dire chaque hachage), et enfin enregistrer les résultats du tri. dans Dans la liste avec le nom de clé myresult. Le résultat du tri ici est bien sûr les noms de clé de tous les éléments de l'ensemble (c'est-à-dire toutes les clés de hachage). Vous pouvez obtenir les noms de clé de tous les éléments de l'ensemble en ajoutant # au paramètre GET. :
TRIER mes hachages PAR *->score GET # STORE myresult
SORT remplacera le * dans le paramètre BY par chaque valeur de myhashes (c'est-à-dire le nom de chaque clé de hachage), et obtiendra sa valeur en fonction des champs donnés après ->, et enfin comparera les champs de myhashes en fonction de ces valeurs de champ. Chaque valeur est triée. De cette façon, myresult contient des noms de clés de hachage qui ont été triés en fonction du score.
Enfin, je pense qu'il y a quelque chose qui ne va pas avec votre conception de hachage. Le hachage ressemble plus à une ligne dans une base de données SQL, avec plusieurs champs, et chaque champ a une valeur correspondante. Si vous n'avez qu'un champ de score, pensez à utiliser zset.
黄舟2017-04-22 09:01:10
HashSet
Ne peut pas être organisé directement. Vous devez conserver un SortedSet
distinct, qui stocke uniquement l'ID utilisateur et les scores correspondants.
PHPz2017-04-22 09:01:10
Je ne sais pas si c'est ce que ça veut dire
Téléchargez simplement le code
$redis->del("user_id");
$redis->hmSet("user_1",array("score"=>5,"id"=>1));
$redis->hmSet("user_2",array("score"=>3,"id"=>2));
$redis->hmSet("user_3",array("score"=>1,"id"=>3));
$redis->hmSet("user_4",array("score"=>2,"id"=>4));
$redis->hmSet("user_5",array("score"=>4,"id"=>5));
$redis->lPush("user_id",1,2,3,4,5);
$sortList = $redis->sort("user_id",array(
'by' => "user_*->score",
'alpha' => TRUE,
'get' => array(
"user_*->id"
)
));
var_dump($sortList);
array(5) { [0]=> string(1) "3" [1]=> string(1) "4" [2]=> string(1) "2" [3]=> string(1) "5" [4]=> string(1) "1" }
Documentation
http://redis.cn/commands/sort.html
黄舟2017-04-22 09:01:10
Le hachage ne peut pas être trié.
Si vous avez besoin de trier, veuillez utiliser l'opération ZSET, ZADD SCORES MEMBERS
L'idée est :
PHP
$uid = $redis->ZREVRANGE("u:scores", 0, 0, WITHSCORES); //PHP-REDIS原生语法貌似这样: ZREVRANGE("u:scores", 0, 0, TRUE); //$uid is AN ARRAY $max_uid = array_keys_array($uid)[0]; //这个max uid 就是你要找到scores最大的UID了.
PS encore une fois, si votre HASH est uniquement utilisé pour stocker une clé de hachage, SCORES n'est pas recommandé de le stocker de cette façon..