实现"查找附近的人"功能,可以利用Redis的Geospatial数据类型,结合用户经纬度信息进行存储和查询。
使用Redis的GEOADD命令将用户经纬度信息存储在一个指定的键值中,然后再使用Redis的GEORADIUS命令可以查询指定经纬度附近一定范围内的用户信息就能简单实现这个功能了。
GEOADD user_location 121.57465 25.04100 user1
GEORADIUS user_location 121.57465 25.04100 1000 km
以上就是查询中国台湾附近1000km的人的两行命令。
代码实现:
import redis.clients.jedis.GeoRadiusResponse;
import redis.clients.jedis.Jedis;
import java.util.List;
import java.util.stream.Collectors;
public class RedisGeoDemo {
private static final String USER_LOCATION_KEY = "user_location";
// 存储用户经纬度信息
public static void saveUserLocation(String userId, double longitude, double latitude, Jedis jedis) {
jedis.geoadd(USER_LOCATION_KEY, longitude, latitude, userId);
}
// 查询附近的人
public static List<String> getNearbyUsers(double longitude, double latitude, double radius, Jedis jedis) {
List<GeoRadiusResponse> responses = jedis.georadius(USER_LOCATION_KEY, longitude, latitude, radius, "km");
return responses.stream().map(GeoRadiusResponse::getMemberByString).collect(Collectors.toList());
}
}