Maison  >  Article  >  base de données  >  Type de données spécial Redis Géospatial

Type de données spécial Redis Géospatial

WBOY
WBOYavant
2022-10-12 16:21:351553parcourir

Dans l'article précédent "Redis Special Data Type Stream", je vous ai présenté le contenu pertinent sur le type de données stream. Cet article vous présente un autre type de données Geospatial dans Redis. aide tout le monde.

Type de données spécial Redis Géospatial

Apprentissage recommandé : Tutoriel vidéo Redis

Avant-propos

Nous savons tous que Redis fournit une multitude de types de données, dont quatre spéciaux : BitMap, HyperLogLog, Geospatial et Stream.

Aujourd'hui, nous parlerons en détail de Geospatial, l'un des quatre types de données spéciaux de Redis ; droits réservés à l'auteur. Pour une réimpression commerciale, veuillez contacter l'auteur pour obtenir une autorisation. Pour une réimpression non commerciale, veuillez indiquer la source.

Redis Geospatial est un nouveau type de données dans Redis version 3.2. Il est principalement utilisé pour stocker des informations de localisation géographique et opérer sur les informations stockées.

Dans notre vie quotidienne, nous nous appuyons de plus en plus sur la recherche de « restaurants à proximité » et l'appel de taxis sur des applications d'appel de taxi, toutes indissociables des applications de services géolocalisés (LBS). Les données accessibles par l'application LBS sont un ensemble d'informations de longitude et de latitude associées à des personnes ou à des objets, et si des plages de longitude et de latitude adjacentes doivent être interrogées, GEO est très approprié pour une application dans les scénarios de service LBS. Implémentation interne

GEO lui-même n'a pas conçu une nouvelle structure de données sous-jacente, mais a directement utilisé le type de collection Sorted Set.

Le type GEO utilise la méthode de codage GeoHash pour convertir la longitude et la latitude en scores de poids d'élément dans l'ensemble trié. Les deux mécanismes clés sont la « division par intervalle de la carte bidimensionnelle » et le « codage de l'intervalle ». Une fois qu'un ensemble de longitudes et de latitudes se situe dans un certain intervalle, il est représenté par la valeur de codage de l'intervalle et la valeur de codage est utilisée comme score de pondération de l'élément Sorted Set.

De cette façon, nous pouvons enregistrer la longitude et la latitude dans l'ensemble trié et utiliser la fonction de « recherche de plage ordonnée par poids » fournie par l'ensemble trié pour réaliser l'exigence de « recherche à proximité » fréquemment utilisée dans les services LBS.

Commandes communes

# 存储指定的地理空间位置,可以将一个或多个经度(longitude)、纬度(latitude)、位置名称(member)添加到指定的 key 中。
GEOADD key longitude latitude member [longitude latitude member ...]
# 从给定的 key 里返回所有指定名称(member)的位置(经度和纬度),不存在的返回 nil。
GEOPOS key member [member ...]
# 返回两个给定位置之间的距离。
GEODIST key member1 member2 [m|km|ft|mi]
# 根据用户给定的经纬度坐标来获取指定范围内的地理位置集合。
GEORADIUS key longitude latitude radius m|km|ft|mi [WITHCOORD] [WITHDIST] [WITHHASH] [COUNT count] [ASC|DESC] [STORE key] [STOREDIST key]

Scénarios d'application

Didi-hailing

Ici, en prenant le scénario Didi-hailing comme exemple, nous présenterons comment utiliser les commandes GEO : GEOADD et GEORADIUS.

Supposons que l'ID du véhicule soit 33 et que l'emplacement de latitude et de longitude soit (116.034579, 39.030452). Nous pouvons utiliser une collection GEO pour enregistrer la latitude et la longitude de tous les véhicules. La clé de collection est cars:locations.

Exécutez la commande suivante pour stocker la position actuelle de longitude et de latitude du véhicule portant le numéro d'identification 33 dans la collection GEO :

GEOADD cars:locations 116.034579 39.030452 33
Lorsque l'utilisateur souhaite trouver un service de covoiturage en ligne près de chez lui, l'application LBS peut utiliser le Commande GEORADIUS.

Par exemple, lorsque l'application LBS exécute la commande suivante, Redis recherchera des informations sur le véhicule dans un rayon de 5 kilomètres centrés sur cette longitude et latitude en fonction des informations de latitude et de longitude de l'utilisateur saisi (116.054579, 39.030452), et les renverra au LBS. application.

GEORADIUS cars:locations 116.054579 39.030452 5 km ASC COUNT 10

Apprentissage recommandé :

Tutoriel vidéo Redis

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:
Cet article est reproduit dans:. en cas de violation, veuillez contacter admin@php.cn Supprimer