使用Redis实现附近的人及打车服务,java多线程面试算法
import redis.clients.jedis.GeoRadiusParam;
import redis.clients.jedis.Jedis;
import java.util.List;
public class RedisGeoService {
private final Jedis jedis;
public RedisGeoService(Jedis jedis) {
this.jedis = jedis;
}
public void addLocation(String userId, double longitude, double latitude) {
jedis.geoadd("taxi:positions", longitude, latitude, userId);
}
public List<GeoRadiusResponse> getNearbyDrivers(double centerLongitude, double centerLatitude, double radius) {
GeoRadiusParam param = GeoRadiusParam.geoRadiusParam()
.withCoord()
.withDist()
.withCount(10); // 假设我们只需要前10个结果
return jedis.georadius("taxi:positions", centerLongitude, centerLatitude, radius, param);
}
}
// 使用示例
public class RedisGeoExample {
public static void main(String[] args) {
Jedis jedis = new Jedis("localhost");
RedisGeoService service = new RedisGeoService(jedis);
// 添加乘客位置
service.addLocation("passenger:123", 116.405285, 39.904989);
// 获取附近的驾驶员
List<GeoRadiusResponse> nearbyDrivers = service.getNearbyDrivers(116.405285, 39.904989, 1000);
// 输出附近驾驶员的信息
for (GeoRadiusResponse response : nearbyDrivers) {
String driverId = response.getMemberByString();
double distance = response.getDistance();
double longitude = response.getCoordinate().getLongitude();
double latitude = response.getCoordinate().getLatitude();
// 处理附近驾驶员的信息
System.out.println("Driver ID: " + driverId + ", Distance: " + distance + ", Location: [" + longitude + ", " + latitude + "]");
}
jedis.close();
}
}
这个代码示例展示了如何使用Redis的GEO功能来存储用户的位置信息,并查询附近的用户。在实际应用中,你需要根据具体的业务逻辑来扩展和处理数据。
评论已关闭