前言

redis在3.2版本里面新增的一个功能就是对GEO(地理位置)的支持。

理位置大概提供了6个命令,分别为:

  • GEOADD
  • GEODIST
  • GEOHASH
  • GEOPOS
  • GEORADIUS
  • GEORADIUSBYMEMBER

它只是一个普通的zset结构。

1.geoadd : 添加一个地理位置

//geoadd : (纬度、经度、名称)三元组
redisTemplate.opsForGeo().add("home", new Point(116.48105, 39.996794), "张三");
redisTemplate.opsForGeo().add("home", new Point(116.514203, 39.905409), "李四");
redisTemplate.opsForGeo().add("home", new Point(116.489033, 40.007669), "王五");

2.geodist : 计算两个元素之间的距离

//计算张三李四之间的距离 其中,距离单位可以是m、km、ml、ft,分别代表米、千米、英里和尺
Distance distance = redisTemplate.opsForGeo().distance("home", "张三", "李四");
Distance distance2 = redisTemplate.opsForGeo().distance("home", "张三", "李四", RedisGeoCommands.DistanceUnit.KILOMETERS);
System.out.println(distance);
System.out.println(distance2.getValue());

3.geohash : 获取元素经纬度坐标经过geohash算法生成的base32编码值

List<String> hash = redisTemplate.opsForGeo().hash("home", "张三");
List<String> hashs = redisTemplate.opsForGeo().hash("home", "张三", "李四");
System.out.println(hash);
System.out.println(hashs);

4.geopos : 获取集合中任意元素的经纬度坐标,可以一次获取多个

//注意:GeoHash对二维经纬度坐标进行一维映射是有损的,通过映射再还原回的经纬度坐标和原始输入的经纬度坐标存在一定的误差。
List<Point> position = redisTemplate.opsForGeo().position("home", "张三");
System.out.println(position);
List<Point> positions = redisTemplate.opsForGeo().position("home", "张三", "李四");
System.out.println(positions);

5.GEORADIUS以给定的经纬度为中心, 返回键包含的位置元素当中, 与中心的距离不超过给定最大距离的所有位置元素。

//通过经度,纬度查找附近的人
Circle circle = new Circle(116.48105, 39.996794, Metrics.KILOMETERS.getMultiplier());
RedisGeoCommands.GeoRadiusCommandArgs args = RedisGeoCommands.GeoRadiusCommandArgs.newGeoRadiusArgs().includeDistance().includeCoordinates().sortAscending().limit(50);
GeoResults<RedisGeoCommands.GeoLocation<Object>> byxy = redisTemplate.opsForGeo().radius("home", circle, args);
System.out.println("通过经纬度附近的人:" + byxy);//通过地方查找附近5km的2个人
RedisGeoCommands.GeoRadiusCommandArgs args2 = RedisGeoCommands.GeoRadiusCommandArgs.newGeoRadiusArgs().includeDistance().includeCoordinates().sortAscending().limit(2);
GeoResults<RedisGeoCommands.GeoLocation<Object>> radius = redisTemplate.opsForGeo().radius("home", "张三", new Distance(5, Metrics.KILOMETERS),args2);
System.out.println("通过名字附近的人:" + radius);

在给定以下可选项时, 命令会返回额外的信息: WITHDIST: 在返回位置元素的同时, 将位置元素与中心之间的距离也一并返回。 距离的单位和用户给定的范围单位保持一致。 WITHCOORD: 将位置元素的经度和维度也一并返回。 WITHHASH: 以 52 位有符号整数的形式, 返回位置元素经过原始 geohash 编码的有序集合分值。 这个选项主要用于底层应用或者调试, 实际中的作用并不大。 命令默认返回未排序的位置元素。 通过以下两个参数, 用户可以指定被返回位置元素的排序方式: ASC: 根据中心的位置, 按照从近到远的方式返回位置元素。 DESC: 根据中心的位置, 按照从远到近的方式返回位置元素。 在默认情况下, GEORADIUS 命令会返回所有匹配的位置元素。 虽然用户可以使用 COUNT <count> 选项去获取前 N 个匹配元素, 但是因为命令在内部可能会需要对所有被匹配的元素进行处理, 所以在对一个非常大的区域进行搜索时, 即使只使用 COUNT 选项去获取少量元素, 命令的执行速度也可能会非常慢。 但是从另一方面来说, 使用 COUNT 选项去减少需要返回的元素数量, 对于减少带宽来说仍然是非常有用的。

6.GEORADIUSBYMEMBER这个命令和 GEORADIUS 命令一样, 都可以找出位于指定范围内的元素, 但是 GEORADIUSBYMEMBER 的中心点是由给定的位置元素决定的。

这个在spring里面方法已过时

详细可以看文档http://redisdoc.com/geo/index.html

redis 的geo地理位置及实现附近的人的功能相关推荐

  1. redis 附近的人_Redis GEO地理位置信息,查看附近的人

    在之前的一篇文章<SpringBoot入门教程(五)Java基于MySQL实现附近的人>,我们介绍了Java基于MySQL实现查找附近的人的功能.今天就来研究研究"查找附近的人& ...

  2. Redis之GEO存储地理位置信息

    在外卖软件中的附近的美食店铺.外卖小哥的距离,打车软件附近的车辆,交友软件中附近的小姐姐.我们都可以利用redis的GEO地理位置计算得出. 1.Redis 的 Geo 是在 3.2 版本才有的 2. ...

  3. java redis geo_redis学习计划(九)redis GEO地理位置

    redis目前已经到了3.2版本,3.2版本里面新增的一个功能就是对GEO(地理位置)的支持. 地理位置大概提供了6个命令,分别为: GEOADD GEODIST GEOHASH GEOPOS GEO ...

  4. redis学习--三种特殊数据类型,GEO地理位置,HyperLogLog,BitMap

    三种特殊数据类型,GEO地理位置,HyperLogLog,BitMap GEO地理位置 简介 Redis 的 GEO 特性在 Redis 3.2 版本中推出, 这个功能可以将用户给定的地理位置信息储存 ...

  5. Redis GEO地理位置信息的应用

    Redis GEO地理位置信息的应用 Redis GEO 概述 应用场景 Redis GEO命令 GEO命令演示 Redis GEO实现附近人的功能 基础类 API接口 接口实现 执行测试 Redis ...

  6. Spring Boot 2 实战:利用Redis的Geo功能实现查找附近的位置

    1. 前言 老板突然要上线一个需求,获取当前位置方圆一公里的业务代理点.明天上线!当接到这个需求的时候我差点吐血,这时间也太紧张了.赶紧去查相关的技术选型.经过一番折腾,终于在晚上十点完成了这个需求. ...

  7. mysql redis geo_利用Redis的Geo功能实现查找附近的位置

    1. 前言 老板突然要上线一个需求,获取当前位置方圆一公里的业务代理点.明天上线!当接到这个需求的时候我差点吐血,这时间也太紧张了.赶紧去查相关的技术选型.经过一番折腾,终于在晚上十点完成了这个需求. ...

  8. Redis使用Geo存储经纬度

    目录 Geo原理简单介绍 Geo常用方法讲解: add方法:添加地理位置坐标 pos方法:给定的 key 里返回所有指定名称(member)的位置(经度和纬度) radius方法:根据给定的位置名称来 ...

  9. 利用Redis的Geo功能实现查找附近的位置!

    1. 前言 老板突然要上线一个需求,获取当前位置方圆一公里的业务代理点.明天上线!当接到这个需求的时候我差点吐血,这时间也太紧张了.赶紧去查相关的技术选型.经过一番折腾,终于在晚上十点完成了这个需求. ...

最新文章

  1. 8月书讯:喜悦翩然而至
  2. uo和o的区别和用法_汉语拼音中,o与uo有什么区别
  3. 成功解决在Eclipse中出现的can not find declarration to go to
  4. opencv for linux mac,opencv for Java在MacOS 10.10安装
  5. boost::multi_array模块index_base 修改工具的测试
  6. android apk如何入门
  7. python可视化水平双向箭头_python数据可视化第二弹
  8. Centos6.4 本地yum源配置
  9. 郭明錤爆料:苹果造车团队已解散
  10. c语言编程指法输入,C语言 课件 第一章引论.pdf
  11. Hadoop学习入门(二)——部署关键问题1:OpenSSH 密钥管理(1)
  12. mysql存储过程switch_Mysql存储过程从0开始(上)
  13. 1. NET 6.0 前言
  14. JavaScript程序设计(笔记1)
  15. ViewUI高保真 原型元件库操作指南
  16. Socket的超时时间
  17. android 渐变歌词,Android仿酷狗动感歌词(支持翻译和音译歌词)显示效果
  18. 何为智能家居上游产业?对其发展有何影响
  19. 服务器环境(插件)搭建
  20. google research

热门文章

  1. 葡萄城首席架构师:前端开发与Web表格控件技术解读
  2. 使用 NSIS 制作软件安装包
  3. know, know abou, and konw of
  4. 网络安全菜鸟学习之漏洞篇——文件包含漏洞
  5. 使用 VMware Player 创建适合封装的虚拟机(转自IT天空Skyfree)
  6. BP神经网络人口预测程序(matlab实现)(转)
  7. Python学习笔记-msg3d实验相关
  8. 两步教你轻松写出时事热点型软文营销文案
  9. 常用摄像头一些点云深度矫正ROS程序(ZED kinect v2 D415)
  10. 私域流量有哪些平台?