Redis以及Jedis的GEO地图功能

2023-12-06 12:58
文章标签 redis jedis 地图功能 geo

本文主要是介绍Redis以及Jedis的GEO地图功能,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

Redis以及Jedis的GEO地图功能
引言:redis是一个高性能的非关系型数据库,作为一个单线程的应用程序,速度非常快。并且不存在多线程情况下的共同资源访问锁的问题。
PS:太久没有写文章,老脸一红。今日记录一下Redis的地图坐标功能

一、Redis介绍
Redis 是完全开源免费的,遵守BSD协议,是一个高性能的key-value数据库。
在Java开发中,Redis是一款经常使用的Nosql数据库,无论是做计数、缓存还是分布式共享Session都非常方便
Redis 与其他 key - value 缓存产品有以下三个特点:
  • Redis支持数据的持久化,可以将内存中的数据保存在磁盘中,重启的时候可以再次加载进行使用。
  • Redis不仅仅支持简单的key-value类型的数据,同时还提供list,set,zset,hash等数据结构的存储。
  • Redis支持数据的备份,即master-slave模式的数据备份。
  • Redis支持事务,但是事务功能不是很完善,不推荐使用

二、Redis优势
  • 性能极高 – Redis能读的速度是110000次/s,写的速度是81000次/s 。
  • 丰富的数据类型 – Redis支持二进制案例的 Strings, Lists, Hashes, Sets 及 Ordered Sets 数据类型操作。
  • 原子 – Redis的所有操作都是原子性的,意思就是要么成功执行要么失败完全不执行。单个操作是原子性的。多个操作也支持事务,即原子性,通过MULTI和EXEC指令包起来。
  • 丰富的特性 – Redis还支持 publish/subscribe, 通知, key 过期等等特性。

三、Redis坐标功能语法

今天主要来说说计数功能
Redis3.2版本提供了GEO(地理位置定位)功能(注意:只有3.2以上的Redis版本才能使用),支持存储地理位置信息来实现诸如附近位置、摇一摇这类依赖于地理位置信息的功能,对于需要实现这些功能的开发者来说是一大福音。GEO功能是Redis的另一做着Matt Stancliff借鉴NoSQL数据库Ardb实现的,Ardb的作者是一名中国人,它提供了优秀的GEO功能。

先来说说Redis的原生语法

参数介绍:
geoadd: redis 语法,固定关键字
key: 一系列点的集合Key
longitude: 经度
latitude: 纬度
member: 具体的经纬度的点的名字
例子:geoadd points 104.074977 30.560872 世纪城地铁站




根据某个点的名字来获取经纬度信息




georadius : 根据某个点,查出其周围半径为radiusm的点
georadiusbymember : 根据某个点的名字找到那个点,然后找其周围半径为radiusm的点


例子:georadiusbymember points beijing 150km
例子2: georadius points 104.074977 30.560872 2km



四、Redis的Geo与java的结合
当然,上面那么多东西并不是我们Java程序员实际关心的语法,我们关心的更多还是上面的那些语法与Java的一个结合。
下面我们就根据一个demo程序来具体来看geo的用法

demo中使用的是springboot程序
首先是pom.xml配置文件


注:spring-boot-starter-data-redis中包含了Jedis的依赖包

然后是Jedis相关Bean的配置


接下来就是Geo的相关的Jedis工具类




最后一个controller来控制
 


注:该controller只是用于测试geo的功能,写得比较简陋。。。

一切搞定后,我们就开始测试该程序是否起作用。
先是向redis中添加坐标





然后看是否能根据某个点,查找周围的点
当距离为三公里事,可以找到先前添加的两个点


当距离为两公里时,就不能找到"世纪城地铁口"


以下地图中红色圈的位置,是我文章中用到的三个点坐标



到这里,已经可以证明,Redis的周围坐标功能起了作用。

五、总结
这个功能在做摇一摇或者周边餐饮、车辆时非常有用
当然,使用百度JSPAPI也可以实现这个功能,不过要引入第三方的依赖。
比较简单的功能,完全可以使用Redis的GEO功能来实现。
以上,是Redis的GEO功能,感谢阅读。

这篇关于Redis以及Jedis的GEO地图功能的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/461912

相关文章

Redis 中的热点键和数据倾斜示例详解

《Redis中的热点键和数据倾斜示例详解》热点键是指在Redis中被频繁访问的特定键,这些键由于其高访问频率,可能导致Redis服务器的性能问题,尤其是在高并发场景下,本文给大家介绍Redis中的热... 目录Redis 中的热点键和数据倾斜热点键(Hot Key)定义特点应对策略示例数据倾斜(Data S

redis+lua实现分布式限流的示例

《redis+lua实现分布式限流的示例》本文主要介绍了redis+lua实现分布式限流的示例,可以实现复杂的限流逻辑,如滑动窗口限流,并且避免了多步操作导致的并发问题,具有一定的参考价值,感兴趣的可... 目录为什么使用Redis+Lua实现分布式限流使用ZSET也可以实现限流,为什么选择lua的方式实现

Redis中管道操作pipeline的实现

《Redis中管道操作pipeline的实现》RedisPipeline是一种优化客户端与服务器通信的技术,通过批量发送和接收命令减少网络往返次数,提高命令执行效率,本文就来介绍一下Redis中管道操... 目录什么是pipeline场景一:我要向Redis新增大批量的数据分批处理事务( MULTI/EXE

Redis中高并发读写性能的深度解析与优化

《Redis中高并发读写性能的深度解析与优化》Redis作为一款高性能的内存数据库,广泛应用于缓存、消息队列、实时统计等场景,本文将深入探讨Redis的读写并发能力,感兴趣的小伙伴可以了解下... 目录引言一、Redis 并发能力概述1.1 Redis 的读写性能1.2 影响 Redis 并发能力的因素二、

Redis中的常用的五种数据类型详解

《Redis中的常用的五种数据类型详解》:本文主要介绍Redis中的常用的五种数据类型详解,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录Redis常用的五种数据类型一、字符串(String)简介常用命令应用场景二、哈希(Hash)简介常用命令应用场景三、列表(L

Redis解决缓存击穿问题的两种方法

《Redis解决缓存击穿问题的两种方法》缓存击穿问题也叫热点Key问题,就是⼀个被高并发访问并且缓存重建业务较复杂的key突然失效了,无数的请求访问会在瞬间给数据库带来巨大的冲击,本文给大家介绍了Re... 目录引言解决办法互斥锁(强一致,性能差)逻辑过期(高可用,性能优)设计逻辑过期时间引言缓存击穿:给

Redis中如何实现商品秒杀

《Redis中如何实现商品秒杀》:本文主要介绍Redis中如何实现商品秒杀问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录技术栈功能实现步骤步骤一:准备商品库存数据步骤二:实现商品秒杀步骤三:优化Redis性能技术讲解Redis的List类型Redis的Set

Redis如何实现刷票过滤

《Redis如何实现刷票过滤》:本文主要介绍Redis如何实现刷票过滤问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录引言一、概述二、技术选型三、搭建开发环境四、使用Redis存储数据四、使用SpringBoot开发应用五、 实现同一IP每天刷票不得超过次数六

Redis客户端工具之RedisInsight的下载方式

《Redis客户端工具之RedisInsight的下载方式》RedisInsight是Redis官方提供的图形化客户端工具,下载步骤包括访问Redis官网、选择RedisInsight、下载链接、注册... 目录Redis客户端工具RedisInsight的下载一、点击进入Redis官网二、点击RedisI

Redis实现RBAC权限管理

《Redis实现RBAC权限管理》本文主要介绍了Redis实现RBAC权限管理,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧... 目录1. 什么是 RBAC?2. 为什么使用 Redis 实现 RBAC?3. 设计 RBAC 数据结构