首页 > 数据库 >redis特殊数据类型-Geospatial(地理位置)用法

redis特殊数据类型-Geospatial(地理位置)用法

时间:2024-04-02 19:31:19浏览次数:30  
标签:chongqi city 127.0 0.1 数据类型 redis 6379 Geospatial china

一 Geospatial(地理位置)介绍

使用经纬度定位地理坐标并用一个有序集合zset保存,所以zset命令也可以使用
有效的经度从-180度到180度。
有效的纬度从-85.05112878度到85.05112878度。

二 Geospatial应用场景

        

通过georadius就可以完成 附近的人功能

withcoord:带上坐标

withdist:带上距离,单位与半径单位相同

COUNT n : 只显示前n个(按距离递增排序)

三,命令

geoadd key longitud(经度) latitude(纬度) member [..]	将具体经纬度的坐标存入一个有序集合
geopos key member [member..]	获取集合中的一个/多个成员坐标
geodist key member1 member2 [unit]	返回两个给定位置之间的距离。默认以米作为单位。
georadius key longitude latitude radius m|km|mi|ft [WITHCOORD][WITHDIST] [WITHHASH] [COUNT count]	以给定的经纬度为中心, 返回集合包含的位置元素当中, 与中心的距离不超过给定最大距离的所有位置元素。
GEORADIUSBYMEMBER key member radius...	功能与GEORADIUS相同,只是中心位置不是具体的经纬度,而是使用结合中已有的成员作为中心点。
geohash key member1 [member2..]	返回一个或多个位置元素的Geohash表示。使用Geohash位置52点整数编码。

四,案例

1、geoadd 添加地理位置

# 规则:两级无法直接添加,我们一般会下载城市数据,直接通过java程序一次性导入! 
# 有效的经度从-180度到180度。 
# 有效的纬度从-85.05112878度到85.05112878度。 
# 当坐标位置超出上述指定范围时,该命令将会返回一个错误,如: 
127.0.0.1:6379> geoadd china:city 39.90 116.40 beijin 
(error) ERR invalid longitude,latitude pair 39.900000,116.400000 

# 参数 key 值() 
127.0.0.1:6379> geoadd china:city 116.40 39.90 beijing 
(integer) 1 
127.0.0.1:6379> geoadd china:city 121.47 31.23 shanghai 
(integer) 1 
127.0.0.1:6379> geoadd china:city 106.50 29.53 chongqi 114.05 22.52 shengzhen 
(integer) 2 
127.0.0.1:6379> geoadd china:city 120.16 30.24 hangzhou 108.96 34.26 xian 
(integer) 2

2、geopos 获得当前坐标值

       

127.0.0.1:6379> GEOPOS china:city beijing                           # 获取指定的城市的经度和纬度! 
1) 1) "116.39999896287918091" 
   2) "39.90000009167092543" 
127.0.0.1:6379> GEOPOS china:city beijing chongqi 
1) 1) "116.39999896287918091" 
   2) "39.90000009167092543" 
2) 1) "106.49999767541885376" 
   2) "29.52999957900659211"

3、geodist 返回两地之间的距离

单位:
m 表示单位为米。
km 表示单位为千米。
mi 表示单位为英里。
ft 表示单位为英尺。

127.0.0.1:6379> GEODIST china:city beijing shanghai km                 # 查看上海到北京的直线距离 
"1067.3788" 
127.0.0.1:6379> GEODIST china:city beijing chongqi  km                  # 查看重庆到北京的直线距离 
"1464.0708"

4、georadiusbymember 找出位于指定元素周围的其他元素

127.0.0.1:6379> GEORADIUSBYMEMBER china:city beijing 1000 km 
1) "beijing" 
2) "xian" 
127.0.0.1:6379> GEORADIUSBYMEMBER china:city shanghai 400 km 
1) "hangzhou" 
2) "shanghai"

5、geohash 返回元素的 Geohash

Geohash :将位置信息转化为 11个字符的Geohash字符串!
将二维的经纬度转换为一维的字符串,如果两个字符串越接近,那么则距离越近!


127.0.0.1:6379> geohash china:city beijing chongqi              
1) "wx4fbxxfke0" 
2) "wm5xzrybty0"

6、georadius 以给定的经纬度为中心, 找出某一半径内的元素

我附近的人? (获得所有附近的人的地址,定位!)通过半径来查询!
获得附近指定数量的人,如:200人
所有数据应该都录入:china:city

127.0.0.1:6379> GEORADIUS china:city 110 30 1000 km          # 以110,30 这个经纬度为中心,寻找方圆1000km内的城市 
1) "chongqi" 
2) "xian" 
3) "shengzhen" 
4) "hangzhou" 
127.0.0.1:6379> GEORADIUS china:city 110 30 500 km withdist                      # 显示到中间距离的位置 
1) 1) "chongqi" 
   2) "341.9374" 
2) 1) "xian" 
   2) "483.8340" 
127.0.0.1:6379> GEORADIUS china:city 110 30 500 km withcoord                     # 显示他人的定位信息 
1) 1) "chongqi" 
   2) 1) "106.49999767541885376" 
      2) "29.52999957900659211" 
2) 1) "xian" 
   2) 1) "108.96000176668167114" 
      2) "34.25999964418929977" 
127.0.0.1:6379> GEORADIUS china:city 110 30 500 km withdist withcoord count 1    # 筛选出指定数量的结果! 
1) 1) "chongqi" 
   2) "341.9374" 
   3) 1) "106.49999767541885376" 
      2) "29.52999957900659211" 
127.0.0.1:6379> GEORADIUS china:city 110 30 500 km withdist withcoord count 2 
1) 1) "chongqi" 
   2) "341.9374" 
   3) 1) "106.49999767541885376" 
      2) "29.52999957900659211" 
2) 1) "xian" 
   2) "483.8340" 
   3) 1) "108.96000176668167114" 
      2) "34.25999964418929977"

7、Geospatial 的其他操作 -查看,删除

GEO 底层的实现原理其实就是 Zset!
我们可以使用Zset命令来操作Geospatial !

127.0.0.1:6379> ZRANGE china:city 0 -1           # 查看地图中全部的元素 
1) "chongqi" 
2) "xian" 
3) "shengzhen" 
4) "hangzhou" 
5) "shanghai" 
6) "beijing" 
127.0.0.1:6379> zrem china:city beijing          # 移除指定元素! 
(integer) 1 
127.0.0.1:6379> ZRANGE china:city 0 -1 
1) "chongqi" 
2) "xian" 
3) "shengzhen" 
4) "hangzhou" 
5) "shanghai"

标签:chongqi,city,127.0,0.1,数据类型,redis,6379,Geospatial,china
From: https://blog.csdn.net/weixin_54097396/article/details/137283258

相关文章

  • 部分数据类型的内置方法及字符串内置方法
    昨日内容回顾【一】循环结构【1】while循环break:退出当前循环coutinue:退出本次循环tag:标志位,可以通过最里层的标志位直接将最外层的while循环断掉【2】for循环遍历可迭代类型(可以被索引取值的都可以被迭代,可一个个取值的就是可迭代的)遍历的意思就是将被需要遍历的......
  • Redis 高可用之持久化
    一.高可用相关知识1.什么是高可用在web服务器中,高可用是指服务器可以正常访问的时间,衡量的标准是在多长时间内可以提供正常服务(99.9%、99.99%、99.999%等等)。但是在Redis语境中,高可用的含义似乎要宽泛一些,除了保证提供正常服务(如主从分离、快速容灾技术),还需要考虑数据容量......
  • Python零基础教学(数据类型)
    文章目录数据类型数字类型文字类型(字符串)数字和文字的区别文字相加文字乘法布尔类型(条件判断)布尔变量数据类型在python中,有很多类型。数据类型是用来区分不同的数据的,他们的操作也不同。数据类型:数字、文字、布尔······今天就想先讲这三个类型·,数字和......
  • java,postgresql,python中各种数据类型的占位长度,取值范围
    Java数据类型Java中的数据类型分为两类:基本数据类型和引用数据类型。基本数据类型数据类型占位长度取值范围byte1字节-128127short2字节-3276832767int4字节-21474836482147483647long8字节-92233720368547758089223372036854775807float4字节1.4E-453.4028235E38double8字节4.......
  • redis数据类型
    以下是Redis的主要数据类型及其使用场景:字符串(string)使用场景:存储用户信息、缓存热点数据等。特性:字符串是Redis最基本的数据类型,支持修改操作,可以用于实现计数器、分布式锁等功能。哈希(Hash)使用场景:存储用户信息、配置信息等。特性:哈希是键值对的集合,提供了存储字......
  • 【Redis教程0x0C】数据库与缓存的一致性保证
    1.引言当我们在实现业务的过程中,如果发现服务器的性能瓶颈在数据库时,就要考虑加上Redis,让它作为数据库的缓存了。这样,客户端请求数据时,如果能在缓存命中,就不用去查数据库了,这大大减轻了数据库的压力,提高了服务器性能。那么这里就产生了个问题,我们在数据更新的时候,既需要......
  • redis数据库
    1、redis数据库是什么?redis数据库是一个持久化缓存数据库,是一个高性能分布式的内存数据库,可以支持大量没有固定模式存储结构的数据。2、redis的特点?(1)开源免费(2)支持数据的持久化,将数据保存在磁盘当中,要使用的时候加载即可(3)redis支持key-value,以及set  zset  hash ......
  • Redis开源协议调整,我们怎么办?
    本文分享自华为云社区《Redis开源协议调整,我们怎么办?》,作者:华为云PaaS服务小智。2024年3月20日,Redis官方宣布,从Redis7.4版本开始,Redis将获得源可用许可证( RSALv2 )和服务器端公共许可证( SSPLv1 )的双重许可,时间点恰逢刚刚完成最新一轮融资,宣布的时机耐人寻味。 ......
  • 【Redisson】源码预读准备工作
    1 前言微服务常见的就是服务和服务之间的协同了,那么Redisson就是我们常用的一种协同工具了,所以想看看它的源码,只有了解它的原理,才能更好的正确使用它。2 准备工作既然要看是不是得先知道的它的源码地址呢?地址:Redisson源码有了源码,是不是还需要一份文档呢?没文档的话怎么......
  • 数据库:Redis数据库
    一、非关系型数据库1.什么是非关系型数据库非关系型数据库(Non-relationalDatabase)又称NoSQL数据库是一种不同于传统关系型数据库管理系统(RDBMS)的数据存储解决方案。NoSQL这个术语最初意味着"NotOnlySQL",强调的是这类数据库不完全依赖于SQL作为查询语言,并且通常不遵循关系......