Redis的地理空间(geospatial)

本文涉及的产品
Redis 开源版,标准版 2GB
推荐场景:
搭建游戏排行榜
云数据库 Tair(兼容Redis),内存型 2GB
简介: Redis的地理空间(geospatial)

正文


Redis的空间半径查询


Geo是Redis自3.2版本之后新增的,这个查询可以满足空间距离范围的查询。下面直接上代码吧。


有效的经度从-180度到180度。

有效的纬度从-85.05112878度到85.05112878度。


主要命令


1、geoadd:添加地理位置的坐标。

2、geopos:获取地理位置的坐标。

3、geodist:计算两个位置之间的距离。

4、georadius:根据用户给定的经纬度坐标来获取指定范围内的地理位置集合。

5、georadiusbymember:根据储存在位置集合里面的某个地点获取指定范围内的地理位置集合。

6、geohash:返回一个或多个位置对象的 geohash 值。


package com.xiaojie.test;
import redis.clients.jedis.GeoCoordinate;
import redis.clients.jedis.GeoRadiusResponse;
import redis.clients.jedis.GeoUnit;
import redis.clients.jedis.Jedis;
import redis.clients.jedis.params.GeoRadiusParam;
import java.util.List;
/**
 * @Description:Redis
 * @author: xiaojie
 * @date: 2021.09.14
 */
public class RedisGeoTest {
    /*
     * @param null
     * @geoadd:添加地理位置的坐标。
        geopos:获取地理位置的坐标。
        geodist:计算两个位置之间的距离。
        georadius:根据用户给定的经纬度坐标来获取指定范围内的地理位置集合。
        georadiusbymember:根据储存在位置集合里面的某个地点获取指定范围内的地理位置集合。
        geohash:返回一个或多个位置对象的 geohash 值。
        * 有效的经度从-180度到180度。longitude
        *有效的纬度从-85.05112878度到85.05112878度。latitude
     * @author xiaojie
     * @date 2021/9/14
     * @return
     */
    public static void main(String[] args) {
        Jedis jedis = new Jedis("192.168.6.137", 6379);
        jedis.geoadd("dist", 116.25, 39.54, "bj");
        jedis.geoadd("dist", 116.45, 38.34, "tj");
        jedis.geoadd("dist", 114.30, 37.27, "sjz");
        //获取经纬度
        List<GeoCoordinate> geopos = jedis.geopos("dist", "tj", "bj");
        for (int i = 0; i < geopos.size(); i++) {
            System.out.println("经度是:" + geopos.get(i).getLongitude() + "纬度是:" + geopos.get(i).getLatitude());
        }
        //计算两地之间的距离 默认单位是米
        System.out.println("北京和天津的距离是:" + jedis.geodist("dist", "bj", "tj", GeoUnit.KM) + "km");
        //根据给定的坐标来获取指定范围内的地理位置集合,按照距离正序排列
        List<GeoRadiusResponse> dist = jedis.georadius("dist", 115.88, 37.30, 150, GeoUnit.KM, GeoRadiusParam.geoRadiusParam().withDist().sortAscending());
        for (int i = 0; i < dist.size(); i++) {
            System.out.println("距离给定地点的位置是:" + dist.get(i).getMemberByString() + "相距:" + dist.get(i).getDistance() + "km");
        }
        //查询距北京150km范围内的地点
        List<GeoRadiusResponse> bj150 = jedis.georadiusByMember("dist", "bj", 150, GeoUnit.KM, GeoRadiusParam.geoRadiusParam().withDist().sortAscending());
        for (int i = 0; i < bj150.size(); i++) {
            System.out.println("距离北京150km内位置是:" + bj150.get(i).getMemberByString() + "相距:" + bj150.get(i).getDistance() + "km");
        }
    }
}


完整代码:spring-boot: Springboot整合redis、消息中间件等相关代码

相关实践学习
基于Redis实现在线游戏积分排行榜
本场景将介绍如何基于Redis数据库实现在线游戏中的游戏玩家积分排行榜功能。
云数据库 Redis 版使用教程
云数据库Redis版是兼容Redis协议标准的、提供持久化的内存数据库服务,基于高可靠双机热备架构及可无缝扩展的集群架构,满足高读写性能场景及容量需弹性变配的业务需求。 产品详情:https://www.aliyun.com/product/kvstore &nbsp; &nbsp; ------------------------------------------------------------------------- 阿里云数据库体验:数据库上云实战 开发者云会免费提供一台带自建MySQL的源数据库&nbsp;ECS 实例和一台目标数据库&nbsp;RDS实例。跟着指引,您可以一步步实现将ECS自建数据库迁移到目标数据库RDS。 点击下方链接,领取免费ECS&amp;RDS资源,30分钟完成数据库上云实战!https://developer.aliyun.com/adc/scenario/51eefbd1894e42f6bb9acacadd3f9121?spm=a2c6h.13788135.J_3257954370.9.4ba85f24utseFl
相关文章
|
7月前
|
存储 NoSQL 定位技术
Redis Geo:掌握地理空间数据的艺术
Redis Geo:掌握地理空间数据的艺术
516 0
|
17天前
|
存储 NoSQL 算法
Redis地理散列GeoHash
GeoHash作为一种高效的地理位置编码算法,在Redis中得到了很好的支持。通过使用Redis的GeoHash命令,可以方便地进行地理位置的存储、查询和计算。GeoHash在位置存储、附近位置搜索、距离计算和实时定位等场景中有着广泛的应用。掌握GeoHash及其在Redis中的使用方法,可以极大地提高地理位置相关应用的开发效率和性能。
25 5
|
5月前
|
存储 NoSQL Redis
Redis07命令-String类型字符串,不管是哪种格式,底层都是字节数组形式存储的,最大空间不超过512m,SET添加,MSET批量添加,INCRBY age 2可以,MSET,INCRSETEX
Redis07命令-String类型字符串,不管是哪种格式,底层都是字节数组形式存储的,最大空间不超过512m,SET添加,MSET批量添加,INCRBY age 2可以,MSET,INCRSETEX
|
6月前
|
存储 NoSQL Redis
Redis第四弹,Redis实现list时候做出的优化ziplist(压缩链表,元素少的情况),可更好的节省空间list——(内部编码:quicklist)Object encoding
Redis第四弹,Redis实现list时候做出的优化ziplist(压缩链表,元素少的情况),可更好的节省空间list——(内部编码:quicklist)Object encoding
|
7月前
|
NoSQL Ubuntu 关系型数据库
Redis入门到通关之Redis网络模型-用户空间和内核态空间
Redis入门到通关之Redis网络模型-用户空间和内核态空间
83 1
|
存储 NoSQL 关系型数据库
深入探索地理空间查询:如何优雅地在MySQL、PostgreSQL及Redis中实现精准的地理数据存储与检索技巧
深入探索地理空间查询:如何优雅地在MySQL、PostgreSQL及Redis中实现精准的地理数据存储与检索技巧
2173 0
|
存储 消息中间件 缓存
redis的适用空间
会话缓存,全页缓存,队列,排行榜,发布等。
46 0
|
NoSQL 定位技术 Redis
Redis学习笔记-GEO经纬度编码原理&地理划分
Redis学习笔记-GEO经纬度编码原理&地理划分
260 1
|
存储 NoSQL Redis
Redis学习笔记-String数据类型及其节省空间优化
Redis学习笔记-String数据类型及其节省空间优化
138 0
|
NoSQL Redis 数据库
Redis 键空间消息提醒功能
从 Redis 2.8.0 开始,Redis 加入了 发布/订阅模式 以及**键空间消息提醒**(keyspace notification)功能。通过键空间消息提醒功能允许客户端通过订阅指定信道获取 Redis 数据变化的能力。由此 你会想到什么? 如果 某个Redis实例没有不支持 psync 功能,则可以通过 **键空间消息提醒** 来获取Redis数据的变化,以此获取增量数据。-- **敲
292 0
Redis 键空间消息提醒功能