最近使用团油的时候总是觉得他的那个按照距离排序的功能很好,所以就试着研究一下。
1. 新建spring boot项目
1.1 pom.xml
添加redis依赖和lombok依赖
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-redis</artifactId>
</dependency>
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<version>1.18.16</version>
<scope>provided</scope>
</dependency>
1.2 application.yml
# Redis数据库索引(默认为0)
spring:
redis:
database: 0
# Redis服务器地址
host: 127.0.0.1
# Redis服务器连接端口
port: 6379
# Redis服务器连接密码(默认为空)
password:
# 连接池最大连接数(使用负值表示没有限制)
jedis:
pool:
max-active: 20
# 连接池最大阻塞等待时间(使用负值表示没有限制)
max-wait: -1
# 连接池中的最大空闲连接
max-idle: 10
# 连接池中的最小空闲连接
min-idle: 0
# 连接超时时间(毫秒)
timeout: 1000
1.3 新建实体类
/**
* 油站实体类
* @author zhouzhaodong
*/
@Data
@Builder
@NoArgsConstructor
@AllArgsConstructor
public class ServiceStation implements Serializable {
/** 油站 */
private String serviceStationName;
/** 经度 */
private Double longitude;
/** 纬度 */
private Double latitude;
}
1.4 新建service
/**
* 服务接口定义
* @author zhouzhaodong
*/
public interface RedisGeoService {
/**
* 把油站信息保存到 Redis 中
* @param serviceStations {@link ServiceStation}
* @return 成功保存的个数
* */
Long saveServiceStationToRedis(Collection<ServiceStation> serviceStations);
/**
* 获取给定油站的坐标
* @param serviceStations 给定油站 key
* @return {@link Point}s
* */
List<Point> getServiceStationPos(String[] serviceStations);
/**
* 获取两个油站之间的距离
* @param serviceStation1 第一个油站
* @param serviceStation2 第二个油站
* @param metric {@link Metric} 单位信息, 可以是 null
* @return {@link Distance}
* */
Distance getTwoServiceStationDistance(String serviceStation1, String serviceStation2, Metric metric);
/**
* 根据给定地理位置坐标获取指定范围内的地理位置集合
* @param within {@link Circle} 中心点和距离
* @param args {@link RedisGeoCommands.GeoRadiusCommandArgs} 限制返回的个数和排序方式, 可以是 null
* @return {@link RedisGeoCommands.GeoLocation}
* */
GeoResults<RedisGeoCommands.GeoLocation<String>> getPointRadius(
Circle within, RedisGeoCommands.GeoRadiusCommandArgs args);