redis geo RedisTemplate工具类
时间: 2023-12-31 14:04:47 浏览: 109
RedisTemplate是Spring Data Redis提供的一个Redis客户端操作工具类,封装了Redis的基本操作方法,支持多种数据类型的操作,包括字符串、哈希、列表、集合、有序集合等。
Redis的GEO命令是用来处理地理位置数据的命令,可以实现以下功能:
- 将给定的地理空间位置(经度、纬度、名称)添加到指定的key中。
- 获取指定地理位置的经度和纬度。
- 获取两个地理位置之间的距离。
- 根据用户给定的地理位置坐标获取指定范围内的地理位置集合。
- 获取指定地理位置周围的地理位置集合。
下面是一个基于RedisTemplate的Redis GEO工具类的示例:
```java
@Component
public class RedisGeoUtil {
@Autowired
private RedisTemplate<String, Object> redisTemplate;
/**
* 将给定的地理空间位置(经度、纬度、名称)添加到指定的key中
* @param key 键名
* @param longitude 经度
* @param latitude 纬度
* @param member 成员名称
* @return 添加的成员数量
*/
public Long geoAdd(String key, double longitude, double latitude, Object member) {
Point point = new Point(longitude, latitude);
return redisTemplate.opsForGeo().add(key, point, member);
}
/**
* 获取指定地理位置的经度和纬度
* @param key 键名
* @param member 成员名称
* @return 经纬度信息
*/
public Point geoGet(String key, Object member) {
return redisTemplate.opsForGeo().position(key, member);
}
/**
* 获取两个地理位置之间的距离
* @param key 键名
* @param member1 成员1名称
* @param member2 成员2名称
* @param metric 单位(默认为米,也可以是千米、英里等)
* @return 两个地理位置之间的距离
*/
public Distance geoDistance(String key, Object member1, Object member2, Metric metric) {
return redisTemplate.opsForGeo().distance(key, member1, member2, metric);
}
/**
* 根据用户给定的地理位置坐标获取指定范围内的地理位置集合
* @param key 键名
* @param longitude 经度
* @param latitude 纬度
* @param radius 范围
* @param unit 单位
* @return 附近的成员列表
*/
public GeoResults<RedisGeoCommands.GeoLocation<Object>> geoRadius(String key, double longitude, double latitude, double radius, RedisGeoCommands.DistanceUnit unit) {
Point point = new Point(longitude, latitude);
Circle circle = new Circle(point, new Distance(radius, unit));
RedisGeoCommands.GeoRadiusCommandArgs args = RedisGeoCommands.GeoRadiusCommandArgs
.newGeoRadiusArgs().includeDistance().includeCoordinates().sortAscending();
return redisTemplate.opsForGeo().radius(key, circle, args);
}
/**
* 获取指定地理位置周围的地理位置集合
* @param key 键名
* @param member 成员名称
* @param radius 范围
* @param unit 单位
* @return 附近的成员列表
*/
public GeoResults<RedisGeoCommands.GeoLocation<Object>> geoNearByMember(String key, Object member, double radius, RedisGeoCommands.DistanceUnit unit) {
RedisGeoCommands.GeoRadiusCommandArgs args = RedisGeoCommands.GeoRadiusCommandArgs
.newGeoRadiusArgs().includeDistance().includeCoordinates().sortAscending();
return redisTemplate.opsForGeo().radius(key, member, new Distance(radius, unit), args);
}
}
```
上述工具类中的方法分别对应了Redis GEO命令中的各个功能,使用起来非常方便。需要注意的是,在使用Redis GEO命令时,需要Redis版本2.8.9以上的支持。
阅读全文