자바 에 서 는 RedisTemplate 에서 geohash 지리 적 위 치 를 사용 하여 가 까 운 사람 을 실현 합 니 다.
자바 에 서 는 RedisTemplate 에서 geohash 지리 적 위 치 를 사용 하여 가 까 운 사람 을 실현 합 니 다.
1. 프로젝트 에 redis 의 pom 가방 을 도입 해 야 합 니 다.
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-redis</artifactId>
</dependency>
2. 항목 에 클래스 설정 을 넣 고 RedisTemplate 에 저 장 된 key 난 장 판 문 제 를 해결 합 니 다.
package com.demo.config;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.data.redis.serializer.RedisSerializer;
import org.springframework.data.redis.serializer.StringRedisSerializer;
@Configuration
public class RedisConfigurtion {
@Autowired
private RedisTemplate redisTemplate;
@Bean
public RedisTemplate<String, Object> stringSerializerRedisTemplate() {
RedisSerializer<String> stringSerializer = new StringRedisSerializer();
redisTemplate.setKeySerializer(stringSerializer);
redisTemplate.setValueSerializer(stringSerializer);
redisTemplate.setHashKeySerializer(stringSerializer);
redisTemplate.setHashValueSerializer(stringSerializer);
return redisTemplate;
}
}
3. 다음은 geohash 방법 을 사용 한 소개 와 포장 방법 입 니 다.
package com.demo.util;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.geo.*;
import org.springframework.data.redis.connection.RedisGeoCommands;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.stereotype.Component;
import java.util.List;
@Component
public class GeoHashUtil {
@Autowired
private RedisTemplate redisTemplate;
/***
* ( 、 、 ) key 。
* @param key redis key
* @param precision
* @param dimension
* @param name
* @return
*/
public Long redisGeoAdd(String key, double precision, double dimension, String name) {
// Long addedNum = redisTemplate.opsForGeo().add("city", new Point(116.405285, 39.904989), " ");
// Long addedNum = redisTemplate.opsForGeo().add("city", new Point(121.47, 31.23), " ");
// Long addedNum = redisTemplate.opsForGeo().add("city", new Point(113.27, 23.13), " ");
Long addedNum = redisTemplate.opsForGeo().add(key, new Point(precision, dimension), name);//params: key, Point( , ),
return addedNum;
}
/***
* key ( )。
* @param key redis key
* @param nameList
*/
public List<Point> redisGeoGet(String key, List<String> nameList) {
List<Point> points = redisTemplate.opsForGeo().position(key, nameList);//params: key, ...
return points;
}
/***
* 。
* @param key redis key
* @param name1 1
* @param name2 2
* @return
*/
public Distance geoDist(String key, String name1, String name2) {
Distance distance = redisTemplate.opsForGeo()
.distance(key, name1, name2, RedisGeoCommands.DistanceUnit.KILOMETERS);//params: key, 1, 2,
return distance;
}
/***
* , , , 。
* @param key redis key
* @param precision
* @param dimension
* @param distance
* @param count
* @return
*/
public GeoResults<RedisGeoCommands.GeoLocation<String>> redisNearByXY(String key, double precision, double dimension, Integer distance, Integer count) {
Circle circle = new Circle(new Point(precision, dimension), new Distance(distance, Metrics.KILOMETERS));//Point( , ) Distance( , )
RedisGeoCommands.GeoRadiusCommandArgs args = RedisGeoCommands.GeoRadiusCommandArgs.newGeoRadiusArgs().includeDistance().includeCoordinates().sortAscending().limit(count);
GeoResults<RedisGeoCommands.GeoLocation<String>> results = redisTemplate.opsForGeo()
.radius(key, circle, args);//params: key, Circle, GeoRadiusCommandArgs
return results;
}
/***
* , , , 。
* @param key redis key
* @param name
* @param distance
* @param count
* @return
*/
public GeoResults<RedisGeoCommands.GeoLocation<String>> geoNearByPlace(String key, String name, Integer distance, Integer count) {
Distance distances = new Distance(distance, Metrics.KILOMETERS);//params: ,
RedisGeoCommands.GeoRadiusCommandArgs args = RedisGeoCommands.GeoRadiusCommandArgs.newGeoRadiusArgs().includeDistance().includeCoordinates().sortAscending().limit(count);
GeoResults<RedisGeoCommands.GeoLocation<String>> results = redisTemplate.opsForGeo()
.radius(key, name, distances, args);//params: key, , Circle, GeoRadiusCommandArgs
return results;
}
/***
* Geohash
* @param key redis key
* @param nameList
*/
public List<String> geoHash(String key, List<String> nameList) {
List<String> results = redisTemplate.opsForGeo().hash(key, nameList);//params: key, ...
return results;
}
}
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
정규 표현 식 과 이상 처리프로그램 이 실행 되 기 시 작 했 고 이상 이 발생 한 후에 우 리 는 이상 한 유형, 이상 이 발생 한 줄 번 호 를 주목 해 야 합 니 다.오 류 는 프로그램 이 실행 되 는 과정 에서 발생 하 는 일련의 이상...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.