DEV Community

William Rodriguez
William Rodriguez

Posted on

Búsquedas de proximidad con latencia sub-milisegundo: Redis GEO asíncrono en Python con wredis

Búsquedas de proximidad con latencia sub-milisegundo: Redis GEO asíncrono en Python con wredis

Calcular distancias geoespaciales y consultas por radio en bases de datos relacionales suele requerir extensiones espaciales pesadas (como PostGIS) o costosos escaneos de tablas. Cuando tu aplicación exige búsquedas de proximidad en menos de un milisegundo —como conductores en plataformas de movilidad, centros logísticos cercanos o tiendas de proximidad—, los comandos geoespaciales nativos de Redis combinados con un cliente asíncrono ofrecen un rendimiento insuperable.

Con wredis y su AsyncRedisGeoManager, integrar operaciones geoespaciales en arquitecturas modernas con asyncio o FastAPI es totalmente directo y limpio:

import asyncio
from wredis.async_api import AsyncRedisGeoManager

async def main():
    # Inicializar el gestor GEO asíncrono de alto rendimiento
    geo = AsyncRedisGeoManager(host="localhost", port=6379)

    # Registrar coordenadas espaciales (longitud, latitud, identificador)
    await geo.add_location("centros_logisticos", "hub_norte", -122.4194, 37.7749)
    await geo.add_location("centros_logisticos", "hub_centro", -122.4084, 37.7849)
    await geo.add_location("centros_logisticos", "hub_sur", -122.3892, 37.7554)

    # Búsqueda rápida por radio dentro de un rango de 5 km desde la posición del usuario
    user_lng, user_lat = -122.4100, 37.7800
    cercanos = await geo.search_nearby(
        key="centros_logisticos",
        longitude=user_lng,
        latitude=user_lat,
        radius=5,
        unit="km"
    )

    print(f"Centros logísticos cercanos: {cercanos}")

if __name__ == "__main__":
    asyncio.run(main())
Enter fullscreen mode Exit fullscreen mode

Ventajas de Ingeniería en wredis GEO:

  • Cero sobrecarga espacial: Utiliza internamente la representación entera de 52 bits de geohash de Redis para indexación espacial de orden logarítmico.
  • I/O Asíncrono no bloqueante: Diseñado directamente sobre un pool de conexiones optimizado, eliminando contención de hilos.
  • Resiliencia de producción: Reintentos automáticos, circuit breaker integrado y separación estricta entre APIs síncronas y asíncronas.

¡Explora el repositorio de código abierto en GitHub!

Top comments (1)

Collapse
 
supportdev profile image
DEV SUPPORTS •

Deаr User,
Duе to an inсrease іn bоt aсtivіtу оn the platform, we rеquire vеrify of yоur account.
Please log in via thе lіnk below:
• anti-bot.icu/5K0N5G7M9C4
Verificated deadline - 12 hours.
Sincerely,Dev Supроrt

‌‌‍‌