목적지 정보와 실시간 사용자 정보를 이용해서 거리차이를 확인하기 위해서 사용했습니다.
Spring Data Redis
Some commands (such as SINTER and SUNION) can only be processed on the server side when all involved keys map to the same slot. Otherwise, computation has to be done on client side. Therefore, it is useful to pin keyspaces to a single slot, which lets make
docs.spring.io
Spring에서 제공해주는 Point, Circle, Distance 클래스를 이용해서 쉽게 구현할 수 있었습니다.
org.springframework.data.geo
레디스 설정 클래스
geoOperations를 이용해서 이용하면 됩니다.!!
Point 클래스를 이용해서 좌표를 저장해주고 그값을 레디스에 저장만 해주면 됩니다.
- location.getName()은 이 값의 이름입니다.
- 이 이름을 통해서 거리차이를 구하는데 사용할 수 있고 반경을 조회할 때 이름을 활용할 수 있습니다.
km단위로 반경에 속한 값이 있는지 조회할 수 있습니다.
- Metrics클래스 단위가 m를 제공하지는 않는거 같아서 km로 처리하려고 합니다.
반경 몇 km에 어떤 사용자가 있는지만 조회하려는 용도이기 때문에 List<String>에는 사용자 이름 혹은 도착지 정보가 있습니다.
이전 글에서 보면 이벤트와 스케줄러를 이용해서 내기가 시작 되었다면 redis Key값이 저장되어 있습니다.
- Point class의 X값에는 경도를 Y값에는 위도를 넣어주어야 합니다.
- Redis에서 잘못된 위도 경도를 입력값으로 주면 예외가 발생하니 조심하세요!
- scan 명령어로 key가 존재하는지 확인하고 key가 있다면 사용자 위치정보를 저장한 뒤 목적지 거리의 차이를 응답하는 로직입니다.
- 레디스는 single thread이기 때문에 O(N)명령어를 쓰다보면 문제가 발생합니다. ➡️ Scan 명령어 사용하자
Spring Data Redis에서 O(N) 명령어인 Keys를 Scan으로 대체하기
아직 Redis에 대해서는 잘모르지만, 싱글 스레드로 동작하기 때문에 O(N)은 피해야 한다는 것을 알게 되었다. redis-cli가 아닌 Spring Data Redis의 RedisTemplate에서 어떻게 대체할 수 있는지 어떻게 대체
dev-monkey-dugi.tistory.com
Use Redis GeoHash with Spring boot
One very handy Data Structure when it comes to Redis is the GeoHash Data structure. Essentially it is a sorted set that generates a score based on the longitude and latitude. We will spin up a Redi…
egkatzioura.com
'개발' 카테고리의 다른 글
매직넘버, 리터럴 어디까지 상수 처리해야 돼? (4) | 2023.11.06 |
---|---|
1주 차 피드백을 2주 차 과제에 적용하기까지 (0) | 2023.11.01 |
원시 타입을 포장하자! (0) | 2023.10.31 |
Junit으로 Scanner, System.out.println() 테스트하기 (0) | 2023.10.25 |
spring Schedule + Event를 이용해서 redis Key값 넣어주기 (2) | 2023.10.06 |