>데이터 베이스 >Redis >Redis 특수 데이터 유형 지리공간

Redis 특수 데이터 유형 지리공간

WBOY
WBOY앞으로
2022-10-12 16:21:351629검색

이전 기사 "Redis 특수 데이터 유형 스트림"에서 데이터 유형 스트림에 대한 관련 내용을 소개했습니다. 이번 기사에서는 Redis의 또 다른 데이터 유형 지리공간을 소개합니다. 모두를 돕습니다.

Redis 특수 데이터 유형 지리공간

추천 학습: Redis 비디오 튜토리얼

머리말

우리 모두는 Redis가 BitMap, HyperLogLog, Geospatial 및 Stream이라는 네 가지 특별한 데이터 유형을 포함한 풍부한 데이터 유형을 제공한다는 것을 알고 있습니다.

오늘은 Redis의 4가지 특수 데이터 유형 중 하나인 Geospatial에 대해 자세히 설명하겠습니다.

응용 시나리오: Didi 택시 호출과 같은 지리적 위치 정보를 저장하는 시나리오

개요 소개

저작권은 저자에게 있습니다. 상업적인 재인쇄의 경우 저자에게 연락하여 승인을 받으시기 바랍니다. 비상업적 재인쇄의 경우 출처를 명시해 주시기 바랍니다.

Redis Geospatial은 Redis 버전 3.2의 새로운 데이터 유형으로 주로 지리적 위치 정보를 저장하고 저장된 정보를 조작하는 데 사용됩니다.

우리는 일상생활에서 '인근 음식점' 검색과 택시 호출 앱에서 택시 호출에 점점 더 의존하고 있으며, 이 모두는 위치 기반 서비스(LBS) 애플리케이션과 분리될 수 없습니다. LBS 애플리케이션이 접근하는 데이터는 사람이나 사물과 관련된 경도 및 위도 정보의 집합으로, 인접한 경도 및 위도 범위를 쿼리해야 하는 경우 GEO는 LBS 서비스 시나리오에 적용하기에 매우 적합합니다.

내부 구현

GEO 자체는 새로운 기본 데이터 구조를 설계하지 않고 Sorted Set 컬렉션 유형을 직접 사용했습니다.

GEO 유형은 GeoHash 인코딩 방법을 사용하여 경도와 위도를 Sorted Set의 요소 가중치 점수로 변환합니다. 두 가지 핵심 메커니즘은 "2차원 지도의 간격 분할"과 "간격 인코딩"입니다. 경도와 위도의 집합이 일정 간격 내에 들어오면 해당 간격의 인코딩 값으로 표현되며, 인코딩 값은 Sorted Set 요소의 가중치 점수로 사용됩니다.

이렇게 하면 경도와 위도를 Sorted Set에 저장할 수 있고, Sorted Set에서 제공하는 '순서 범위 무게별 검색' 기능을 활용하면 LBS 서비스에서 자주 사용하는 '주변 검색' 요건을 구현할 수 있습니다.

공통 명령어

# 存储指定的地理空间位置,可以将一个或多个经度(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]

응용 시나리오

Didi-hailing

여기에서는 Didi-hailing 시나리오를 예로 들어 GEO 명령어인 GEOADD와 GEORADIUS를 사용하는 방법을 소개합니다.

차량 ID가 33이고 위도와 경도 위치가 (116.034579, 39.030452)라고 가정하면 GEO 컬렉션을 사용하여 모든 차량의 위도와 경도를 저장할 수 있습니다.

다음 명령을 실행하여 ID 번호 33인 차량의 현재 경도 및 위도 위치를 GEO 컬렉션에 저장합니다.

GEOADD cars:locations 116.034579 39.030452 33

사용자가 근처의 온라인 차량 공유 서비스를 찾고자 할 때 LBS 애플리케이션은 GEORADIUS 명령 .

예를 들어 LBS 애플리케이션이 다음 명령을 실행하면 Redis는 입력된 사용자의 위도 및 경도 정보(116.054579, 39.030452)를 기준으로 이 경도와 위도를 중심으로 5km 이내의 차량 정보를 검색하여 LBS로 반환합니다. 애플리케이션.

GEORADIUS cars:locations 116.054579 39.030452 5 km ASC COUNT 10

추천 학습: Redis 비디오 튜토리얼

위 내용은 Redis 특수 데이터 유형 지리공간의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
이 기사는 juejin.im에서 복제됩니다. 침해가 있는 경우 admin@php.cn으로 문의하시기 바랍니다. 삭제