Heim  >  Artikel  >  Datenbank  >  Verwenden Sie Redis, um die Lotteriefunktion abzuschließen

Verwenden Sie Redis, um die Lotteriefunktion abzuschließen

齐天大圣
齐天大圣Original
2020-05-13 16:21:163962Durchsuche

Einführung in die Redis-Sammlung

Der Sammlungsdatentyp von Redis ist sehr leistungsstark. Wenn Sie von Mengen sprechen, denken Sie vielleicht an Mengen aus der Oberstufenmathematik. Tatsächlich haben sie die gleiche Bedeutung. Redis-Sammlungen können viele Zeichenfolgen (Elemente) speichern. Redis unterstützt bis zu 2 hoch 32 minus 1 Element, aber die Elemente in der Sammlung sind eindeutig und es wird keine Duplizierung geben. Wie Mengen in der Mathematik unterstützt Redis auch Schnittmenge, Vereinigung und Differenz.

Sie können damit viele interessante Funktionen ausführen. Am gebräuchlichsten ist die Tag-Funktion. Zu den Tags von Benutzer A gehören möglicherweise „Animation“, „Sport“ und „zweidimensional“ und zu den Tags von Benutzer B gehören „Sport“, „Reise“ und „Basketball“. Mithilfe der Vereinigung von Mengen können wir dann ihre gemeinsame Bezeichnung ermitteln. Wenn das System außerdem die Tags des Benutzers kennt, kann es ihm relevante Werbung oder Produkte empfehlen. Darüber hinaus lassen sich viele interessante Funktionen umsetzen. Werfen wir heute einen Blick darauf, wie man Reids zur Implementierung der Lotteriefunktion verwendet.

sRandMember und sPop

Die Funktionen dieser beiden Befehle sind sehr ähnlich. Sie geben beide einen Elementwert aus einer Sammlung zurück. Der Unterschied besteht darin, dass sRandMember die zurückgegebenen Elemente nicht aus der Sammlung löscht, sPop jedoch. Diese beiden Befehle können jeweils unterschiedliche Lotteriealgorithmen implementieren.

Zum Beispiel gibt es 100 Elemente im Satz und die Werte reichen von der Zahl 1 bis zur Zahl 100. Wir definieren, dass wenn die Zahl 1 gezogen wird, dies einen Gewinn bedeutet.

Wenn Sie sRandMember verwenden, beträgt die Gewinnwahrscheinlichkeit beim nächsten Mal 1 %, egal wie oft Sie es zuvor gezogen haben. Bei sPop ist die Gewinnwahrscheinlichkeit jedes Mal anders. Die Gewinnwahrscheinlichkeit der ersten Person beträgt 1 %. Wenn die erste Person nicht gewinnt, beträgt die Gewinnwahrscheinlichkeit der zweiten Person 1/99 und so weiter.

Implementierung der Lotteriefunktion

Es gibt eigentlich nur zwei Schritte, um die Lotteriefunktion zu implementieren. Stellen Sie zunächst die Lotteriewahrscheinlichkeit ein , Elemente zum Set hinzufügen und dann Die Lotterie hat begonnen.

Stellen Sie die Lotteriewahrscheinlichkeit ein, der Pseudocode lautet wie folgt:

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

Lotterie, der Pseudocode lautet wie folgt:

/**
 * 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;
}

Beachten Sie, dass stand zum Festlegen der Wahrscheinlichkeit verwendet wird . Wenn die Sammlung beispielsweise 10.000 Elemente enthält und der Stand auf 10 eingestellt ist, beträgt die Wahrscheinlichkeit 10/10.000. Wenn der von der Redis-Sammlung zurückgegebene Elementwert kleiner oder gleich diesem Wert ist, bedeutet dies, dass dies der Fall ist ausgewählt.

Redis-Sammlungen können auch andere interessante Funktionen ausführen, wie z. B. das Zählen der Zugriffs-IPs des Tages, das Zählen aktiver Benutzer usw. Jeder kann seiner Fantasie freien Lauf lassen, um weitere interessante Funktionen auszuführen.

Das obige ist der detaillierte Inhalt vonVerwenden Sie Redis, um die Lotteriefunktion abzuschließen. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn