Maison  >  Article  >  base de données  >  Utilisez Redis pour compléter la fonction de loterie

Utilisez Redis pour compléter la fonction de loterie

齐天大圣
齐天大圣original
2020-05-13 16:21:163918parcourir

Introduction à la collection Redis

Le type de données de collecte de Redis est très puissant. En parlant d’ensembles, vous pensez peut-être aux ensembles de mathématiques au lycée. En fait, ils ont la même signification. Les collections Redis peuvent stocker de nombreuses chaînes (éléments). Redis prend en charge jusqu'à 2 puissance 32 moins 1 élément, mais les éléments de la collection sont uniques et il n'y aura pas de duplication. Comme les ensembles en mathématiques, Redis prend également en charge l'intersection, l'union et la différence.

Vous pouvez l'utiliser pour remplir de nombreuses fonctions intéressantes. La plus courante est la fonction de balise. Peut-être que les balises de l'utilisateur A incluent « animation », « sports » et « bidimensionnel », et que les balises de l'utilisateur B incluent « sports », « voyage » et « basket-ball ». Ensuite, en utilisant l’union des ensembles, vous pouvez connaître quelle est leur étiquette commune. De plus, lorsque le système connaît les balises de l'utilisateur, il peut lui recommander des publicités ou des produits pertinents. De plus, il peut également mettre en œuvre de nombreuses fonctions intéressantes. Aujourd'hui, voyons comment utiliser Reids pour implémenter la fonction de loterie.

sRandMember et sPop

Les fonctions de ces deux commandes sont très similaires. Elles renvoient toutes deux une valeur d'élément d'une collection. La différence est que sRandMember ne supprimera pas les éléments renvoyés de la collection, mais sPop le fera. Ces deux commandes peuvent implémenter respectivement différents algorithmes de loterie.

Par exemple, il y a 100 éléments dans l'ensemble, et les valeurs vont du chiffre 1 au chiffre 100. Nous définissons que si le chiffre 1 est tiré, cela signifie gagner.

Si vous utilisez sRandMember, peu importe le nombre de fois où vous l'avez tiré auparavant, la probabilité de gagner la prochaine fois est de 1 %. Avec sPop, la probabilité de gagner est différente à chaque fois. La probabilité de gagner de la première personne est de 1 %. Si la première personne ne parvient pas à gagner, la probabilité de gagner de la deuxième personne est de 1/99, et ainsi de suite.

Mise en œuvre de la fonction de loterie

Il n'y a en fait que deux étapes pour implémenter la fonction de loterie. Tout d'abord, définissez la probabilité de loterie, c'est-à-dire. , ajoutez des éléments à l'ensemble, puis La loterie a commencé.

Définissez la probabilité de loterie, le pseudo code est le suivant :

/**
 * $key 集合键名
 * $cnt 集合元素数量
 */
function setProb($key, $cnt)
{
    for ($i = 1; $i <= $cnt; $i ++) {
        $redis->sAdd($key, $i);
    }
}

Loterie, le pseudo code est le suivant :

/**
 * string $key 集合键名
 * int $stand 小于等于该数即表示抽中
 * int $type 抽奖算法,1表示使用sRandMember,2的话
 *           使用sPop
 */
function draw ($key, $stand, $type = 1)
{
    if ($type == 1) {
        $number = $redis->sRandMember($key);
    } else {
        $number = $redis->sPop($key);
    }
    
    return $number < $stand;
}

Notez que le support est utilisé pour définir la probabilité . Par exemple, s'il y a 10 000 éléments dans la collection et que stand est défini sur 10, alors la probabilité est de 10/10 000. Lorsque la valeur de l'élément renvoyée par la collection redis est inférieure ou égale à cette valeur, cela signifie qu'elle l'est. choisi.

Les collections Redis peuvent également remplir d'autres fonctions intéressantes, comme compter les IP d'accès de la journée, compter les utilisateurs actifs, etc. Tout le monde peut utiliser son imagination pour réaliser des fonctions plus intéressantes.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn