Tous les produits
Search
Centre de documentation

Tair (Redis® OSS-Compatible):Utiliser des filtres de Bloom pour gérer les notifications push d'événements de jeu

Dernière mise à jour :Aug 08, 2026

Les événements de jeu (fenêtres contextuelles, messages en jeu, quêtes de PNJ) doivent parvenir à chaque joueur une seule fois. Avec des millions de joueurs simultanés, le filtre de Bloom répond à cette question fondamentale : ce joueur a-t-il déjà reçu cette notification ?

Ce guide explique comment se connecter à une instance Tair (Enterprise Edition) et utiliser des filtres de Bloom avec Jedis pour éviter les notifications push en double.

Fonctionnement

Un filtre de Bloom est une structure de données probabiliste qui répond aux requêtes d'appartenance avec une empreinte mémoire minimale. Il renvoie l'un des deux résultats suivants :

  • Absence certaine dans l'ensemble : le joueur n'a pas reçu la notification ; envoyez-la.

  • Présence possible dans l'ensemble : le joueur a peut-être reçu la notification ; ignorez-la.

Le compromis ? Des faux positifs sont possibles, ce qui signifie qu'un petit nombre de joueurs risque de manquer une notification. Pour la plupart des scénarios d'événements de jeu, ce compromis reste acceptable au vu des gains en matière de mémoire et de performances.

Pourquoi utiliser des filtres de Bloom pour ce cas d'utilisation :

Avantage Détail
Efficacité mémoire Les filtres de Bloom utilisent des tableaux de bits au lieu de stocker les ID complets des joueurs. Ils consomment ainsi nettement moins d'espace que les structures de données traditionnelles, en particulier lors du stockage de l'état de diffusion pour des millions de joueurs.
Évolutivité Les filtres de Bloom fonctionnent nativement dans les clusters Redis et évoluent avec votre base de joueurs.

Prérequis

Avant de commencer, assurez-vous de disposer des éléments suivants :

  • Une instance Tair (Enterprise Edition) avec son endpoint et son numéro de port

  • Le mot de passe de l'instance

  • Java 8 ou version ultérieure

  • Maven

Configurer la dépendance Jedis

Ajoutez Jedis 5.1.0 à votre fichier pom.xml :

<dependency>
    <groupId>redis.clients</groupId>
    <artifactId>jedis</artifactId>
    <version>5.1.0</version>
</dependency>

Gérer les notifications avec un filtre de Bloom

L'exemple suivant utilise trois opérations pour contrôler la diffusion des notifications :

Opération Description
bfReserve Crée le filtre de Bloom avec une capacité cible et un taux de faux positifs
bfExists Vérifie si un ID de joueur figure déjà dans le filtre
bfAdd Enregistre le fait qu'un joueur a reçu la notification
import redis.clients.jedis.*;
import redis.clients.jedis.UnifiedJedis;

public class TairBloomFilterDemo {
    // Replace with your instance endpoint, port number, and password.
    static HostAndPort hostAndPort = new HostAndPort("r-bp1y****svonly41srpd.redis.rds.aliyuncs.com", 6379);
    static JedisClientConfig config = DefaultJedisClientConfig.builder().password("tw:Da***3").build();
    static UnifiedJedis unifiedJedis = new UnifiedJedis(hostAndPort, config);

    private static final String BLOOM_KEY = "activity_popup";

    /**
     * Creates the Bloom filter with a 1% false positive rate and capacity for 50,000 player IDs.
     */
    public static void createBloom() {
        try {
            unifiedJedis.bfReserve(BLOOM_KEY, 0.01, 50000);
        } catch (Exception e) {
            e.printStackTrace(); // Handle connection timeouts and other errors.
        }
    }

    /**
     * Returns true if the player has not yet received the notification.
     */
    public static boolean shouldShowPopup(String playerId) {
        try {
            return !unifiedJedis.bfExists(BLOOM_KEY, playerId);
        } catch (Exception e) {
            e.printStackTrace(); // Handle connection timeouts and other errors.
            return true;
        }
    }

    /**
     * Records that the player has received the notification.
     */
    public static void updatePopupState(String playerId) {
        try {
            unifiedJedis.bfAdd(BLOOM_KEY, playerId);
        } catch (Exception e) {
            e.printStackTrace(); // Handle connection timeouts and other errors.
        }
    }

    /**
     * Sends a notification to the player if they haven't received one yet.
     */
    public static void handlePopup(String playerId) {
        if (shouldShowPopup(playerId)) {
            System.out.println("Push a notification to the player: " + playerId);
            updatePopupState(playerId);
        } else {
            System.out.println("Player " + playerId + " has already been notified.");
        }
    }

    public static void main(String[] args) {
        createBloom();
        String playerId = "player123";

        handlePopup(playerId); // Sends the notification on first login.
        handlePopup(playerId); // Skips the notification on subsequent logins.
    }
}

Sortie attendue :

Push a notification to the player: player123
Player player123 has already been notified.

Choisir un taux de faux positifs

Le paramètre error_rate de bfReserve gère le compromis entre précision et consommation mémoire. Un taux plus faible améliore la précision mais augmente la consommation de mémoire.

Taux Cas d'utilisation
1 % (0,01) ou plus La précision n'est pas critique (par exemple, préchargement de cache ou systèmes de recommandation). Consomme moins de mémoire mais présente un taux de faux positifs plus élevé.
0,1 % à 1 % (0,001–0,01) La plupart des scénarios : offre un équilibre raisonnable entre efficacité mémoire et précision.
0,01 % (0,0001) ou moins Un faible taux de faux positifs est essentiel (par exemple, systèmes de sécurité ou applications financières). Consomme davantage de mémoire.

Dans l'exemple, le filtre de Bloom est créé avec un taux de faux positifs de 1 % et une capacité pour 50 000 ID de joueurs. Ajustez ces valeurs en fonction de votre base de joueurs prévue et de vos exigences en matière de précision.

Faux positifs et diffusion des notifications

Un faux positif signifie que le filtre indique à tort qu'un joueur a déjà reçu une notification alors que ce n'est pas le cas. Le joueur concerné rate alors une notification. Pour la plupart des scénarios d'événements de jeu, cela reste acceptable. Si l'omission d'une notification n'est pas tolérable (par exemple, pour des récompenses sensibles au temps), envisagez de compléter le filtre de Bloom par une étape de confirmation secondaire.

Compatibilité Tair (Enterprise Edition)

Le filtre de Bloom fourni par Tair (Enterprise Edition) est compatible avec le filtre de Bloom Redis et utilise les mêmes commandes. Consultez la section Commandes TairBloom pour obtenir la référence complète des commandes.