2026-10-20 16:32:22
Redis 通过 GEO 功能实现查询附近的人,主要利用其内置的地理空间索引能力。以下是具体实现方法和关键细节:
1. 核心方法Redis 的 GEO 功能基于 ZSet 实现,提供以下关键命令:
使用 GEOADD 将用户位置存入 Redis。例如:
GEOADD person 116.404269 39.913164 xiaomingGEOADD person 116.36 39.922461 xiaohong(2) 查询附近的人通过 GEORADIUSBYMEMBER 查询某用户附近的其他用户。例如,查询小明(xiaoming)周围 5 公里内的人:
GEORADIUSBYMEMBER person xiaoming 5 km WITHDIST返回结果示例:
1) 1) "xiaohong" 2) "3.9153" # 距离(千米)3. 底层原理使用 Jedis 客户端实现:
import redis.clients.jedis.*;public class NearbyPeople { public static void main(String[] args) { Jedis jedis = new Jedis("127.0.0.1", 6379); // 添加位置数据 jedis.geoadd("person", 116.404269, 39.913164, "xiaoming"); jedis.geoadd("person", 116.36, 39.922461, "xiaohong"); // 查询小明附近 5 公里的人 List<GeoRadiusResponse> nearby = jedis.georadiusByMember( "person", "xiaoming", 5, GeoUnit.KM ); nearby.forEach(res -> System.out.println("附近的人:" + res.getMemberByString()) ); }}5. 注意事项通过 Redis GEO,可以高效实现基于地理位置的功能,适合 LBS(位置服务)场景。如需更高精度或复杂查询,可考虑结合专业地理数据库(如 PostGIS)。