Tous les produits
Search
Centre de documentation

Tair (Redis® OSS-Compatible):Implémenter un service d'achat local à l'aide de TairGIS

Dernière mise à jour :Aug 08, 2026

Lorsque les plateformes de commerce électronique doivent faire correspondre la localisation d'un consommateur à la zone de livraison d'un magasin, les requêtes adressées aux bases de données sur disque comme MySQL ou PostGIS peuvent devenir un goulot d'étranglement à grande échelle. TairGIS, une structure de données géospatiales dans Tair (Enterprise Edition), utilise des index R-tree pour exécuter les requêtes CONTAINS, WITHIN et INTERSECTS en quelques millisecondes, ce qui le rend particulièrement adapté aux scénarios d'achat en ligne et de retrait en magasin (BOPIS) et de livraison intra-urbaine où une faible latence est cruciale.

Ce guide explique comment utiliser TairGIS pour créer un service de recherche de magasins : à partir des coordonnées d'un consommateur, identifiez les magasins dont la zone de service couvre cette localisation.

Pourquoi choisir TairGIS plutôt que MySQL ou PostGIS

Facteur MySQL / PostGIS TairGIS
Stockage Sur disque En mémoire
Latence des requêtes Lente pour les grands volumes de données Quelques millisecondes
Type d'index B-tree / GiST R-tree
Opérations spatiales API GIS complète CONTAINS, WITHIN, INTERSECTS

Fonctionnement

Chaque magasin sur une plateforme de commerce électronique définit une zone de service, c'est-à-dire la zone géographique dans laquelle il accepte les commandes. Une zone de service peut être un district spécifique, une zone de forme irrégulière ou un cercle d'un rayon donné autour du magasin.

Lorsqu'un consommateur passe une commande, le système vérifie si sa localisation se trouve à l'intérieur de la zone de service d'un magasin. TairGIS gère cette opération grâce à deux fonctions :

  1. Ajoutez les zones de disponibilité des magasins d'une marque à TairGIS.

  2. Recherchez les magasins disponibles situés à proximité d'un consommateur en fonction de sa localisation.

Prérequis

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

  • Une instance Tair (Enterprise Edition) avec TairGIS activé

  • Python 3.8

  • Le SDK Tair-py installé : exécutez pip3 install tair

Se connecter à une instance Tair

Créez une connexion à votre instance Tair. Remplacez les valeurs d'espace réservé par votre endpoint réel et votre mot de passe.

# -*- coding: utf-8 -*-
from typing import Dict
from tair import Tair
from tair import ResponseError

def get_tair() -> Tair:
    """
    Connect to a Tair instance.
    - host: the endpoint of your Tair instance
    - port: the port number (default: 6379)
    - password: the password of the default database account.
      To connect with a custom database account, use the username:password format.
    """
    tair: Tair = Tair(
        host="r-8vb************.redis.zhangbei.rds.aliyuncs.com",
        port=6379,
        db=0,
        password="D******23",
        decode_responses=True
    )
    return tair

Ajouter des zones de service de magasin

Utilisez GIS.ADD pour stocker la zone de service de chaque magasin sous forme de géométrie POLYGON Well-Known Text (WKT). Regroupez les magasins par ID de marque afin de pouvoir interroger tous les magasins d'une marque donnée en un seul appel.

def add_brand_store(brandID: str, mapping: Dict[str, str]) -> bool:
    """
    Add service areas for all stores of a brand using GIS.ADD.
    - brandID: the brand identifier (used as the TairGIS key)
    - mapping: a dict mapping store IDs to their WKT POLYGON geometries
    """
    try:
        tair = get_tair()
        ret = tair.gis_add(brandID, mapping)
        return ret == 1
    except ResponseError as e:
        print(e)
        return False

Rechercher les magasins disponibles selon la localisation du consommateur

Utilisez gis_contains pour déterminer quels magasins incluent la localisation du consommateur dans leur zone de service. Transmettez les coordonnées du consommateur sous forme de géométrie WKT POINT.

def get_service_store(brandID: str, user_location: str):
    """
    Return stores whose service area contains the consumer's location.
    - brandID: the brand identifier
    - user_location: the consumer's location as a WKT POINT, e.g. 'POINT(lon lat)'
    """
    try:
        tair = get_tair()
        return tair.gis_contains(brandID, user_location)
    except:
        return None

(Facultatif) Interroger toutes les zones de service d'une marque

Utilisez GIS.GETALL pour récupérer les zones de service de tous les magasins d'une marque donnée. Cette opération s'avère utile pour le débogage ou pour créer une vue cartographique des magasins.

def get_brand_all(brandID):
    """
    Return all stores and their service areas for a brand using GIS.GETALL.
    """
    try:
        tair = get_tair()
        return tair.gis_getall(brandID)
    except:
        return None

Exemple

L'exemple suivant ajoute deux magasins pour brand1, récupère toutes les zones de service, puis identifie le magasin qui dessert un consommateur situé aux coordonnées (120.19707, 30.19539).

if __name__ == "__main__":
    tair = get_tair()

    # Add service areas for two stores of brand1
    add_brand_store(
        "brand1",
        {
            "store_1": "POLYGON ((120.14772 30.19513, 120.15370 30.17838, 120.19385 30.18011, 120.18853 30.20817))",
            "store_2": "POLYGON ((120.18986 30.20852, 120.19651 30.17988, 120.22512 30.17978, 120.21667 30.22292))"
        },
    )

    print("Query all the stores of brand1 and their available scopes:")
    print(get_brand_all('brand1'))

    print("Query the available stores for a consumer who is located at coordinates (120.19707, 30.19539):")
    print(get_service_store('brand1', 'POINT(120.19707 30.19539)'))

Sortie attendue :

Query all the stores of brand1 and their available scopes.
['store_1', 'POLYGON((120.14772 30.19513,120.1537 30.17838,120.19385 30.18011,120.18853 30.20817))', 'store_2', 'POLYGON((120.18986 30.20852,120.19651 30.17988,120.22512 30.17978,120.21667 30.22292))']
Query the available stores for a consumer who is located at coordinates (120.19707, 30.19539).
[1, ['store_2', 'POLYGON((120.18986 30.20852,120.19651 30.17988,120.22512 30.17978,120.21667 30.22292))']]

Le magasin disponible pour le consommateur situé aux coordonnées (120.19707, 30.19539) est store_2.

Étapes suivantes