Redis以及Jedis的GEO地图功能

2023-11-15

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功能,感谢阅读。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Redis以及Jedis的GEO地图功能 的相关文章

  • 如何默认将 Maven 插件附加到阶段?

    我有一个 Maven 插件应该在编译阶段运行 所以在项目中consumes我的插件 我必须做这样的事情
  • 如何在 Play java 中创建数据库线程池并使用该池进行数据库查询

    我目前正在使用 play java 并使用默认线程池进行数据库查询 但了解使用数据库线程池进行数据库查询可以使我的系统更加高效 目前我的代码是 import play libs Akka import scala concurrent Ex
  • 在画布上绘图

    我正在编写一个 Android 应用程序 它可以在视图的 onDraw 事件上直接绘制到画布上 我正在绘制一些涉及单独绘制每个像素的东西 为此我使用类似的东西 for int x 0 x lt xMax x for int y 0 y lt
  • 在 java 类和 android 活动之间传输时音频不清晰

    我有一个android活动 它连接到一个java类并以套接字的形式向它发送数据包 该类接收声音数据包并将它们扔到 PC 扬声器 该代码运行良好 但在 PC 扬声器中播放声音时会出现持续的抖动 中断 安卓活动 public class Sen
  • 在 HTTPResponse Android 中跟踪重定向

    我需要遵循 HTTPost 给我的重定向 当我发出 HTTP post 并尝试读取响应时 我得到重定向页面 html 我怎样才能解决这个问题 代码 public void parseDoc final HttpParams params n
  • 多个 Maven 配置文件激活多个 Spring 配置文件

    我想在 Maven 中构建一个环境 在其中我想根据哪些 Maven 配置文件处于活动状态来累积激活多个 spring 配置文件 目前我的 pom xml 的相关部分如下所示
  • 列出jshell中所有活动的方法

    是否有任何命令可以打印当前 jshell 会话中所有新创建的方法 类似的东西 list但仅适用于方法 您正在寻找命令 methods all 它会打印所有方法 包括启动 JShell 时添加的方法 以及失败 被覆盖或删除的方法 对于您声明的
  • Liferay ClassNotFoundException:DLFileEntryImpl

    在我的 6 1 0 Portal 实例上 带有使用 ServiceBuilder 和 DL Api 的 6 1 0 SDK Portlet 这一行 DynamicQuery query DynamicQueryFactoryUtil for
  • 磁模拟

    假设我在 n m 像素的 2D 表面上有 p 个节点 我希望这些节点相互吸引 使得它们相距越远吸引力就越强 但是 如果两个节点之间的距离 比如 d A B 小于某个阈值 比如 k 那么它们就会开始排斥 谁能让我开始编写一些关于如何随时间更新
  • 路径中 File.separator 和斜杠之间的区别

    使用有什么区别File separator和一个正常的 在 Java 路径字符串中 与双反斜杠相反 平台独立性似乎不是原因 因为两个版本都可以在 Windows 和 Unix 下运行 public class SlashTest Test
  • 如何在PreferenceActivity中添加工具栏

    我已经使用首选项创建了应用程序设置 但我注意到 我的 PreferenceActivity 中没有工具栏 如何将工具栏添加到我的 PreferenceActivity 中 My code 我的 pref xml
  • 十进制到八进制的转换[重复]

    这个问题在这里已经有答案了 可能的重复 十进制转换错误 https stackoverflow com questions 13142977 decimal conversion error 我正在为一个类编写一个程序 并且在计算如何将八进
  • Android 中麦克风的后台访问

    是否可以通过 Android 手机上的后台应用程序 服务 持续监控麦克风 我想做的一些想法 不断聆听背景中的声音信号 收到 有趣的 音频信号后 执行一些网络操作 如果前台应用程序需要的话 后台应用程序必须能够智能地放弃对麦克风的访问 除非可
  • 在mockito中使用when进行模拟ContextLoader.getCurrentWebApplicationContext()调用。我该怎么做?

    我试图在使用 mockito 时模拟 ContextLoader getCurrentWebApplicationContext 调用 但它无法模拟 here is my source code Mock org springframewo
  • 玩!框架:运行“h2-browser”可以运行,但网页不可用

    当我运行命令时activator h2 browser它会使用以下 url 打开浏览器 192 168 1 17 8082 但我得到 使用 Chrome 此网页无法使用 奇怪的是它以前确实有效 从那时起我唯一改变的是JAVA OPTS以启用
  • Firebase 添加新节点

    如何将这些节点放入用户节点中 并创建另一个节点来存储帖子 我的数据库参考 databaseReference child user getUid setValue userInformations 您需要使用以下代码 databaseRef
  • 当我从 Netbeans 创建 Derby 数据库时,它存储在哪里?

    当我从 netbeans 创建 Derby 数据库时 它存储在哪里 如何将它与项目的其余部分合并到一个文件夹中 右键单击Databases gt JavaDB in the Service查看并选择Properties This will
  • 如何实现仅当可用内存较低时才将数据交换到磁盘的写缓存

    我想将应用程序生成的数据缓存在内存中 但如果内存变得稀缺 我想将数据交换到磁盘 理想情况下 我希望虚拟机通知它需要内存并将我的数据写入磁盘并以这种方式释放一些内存 但我没有看到任何方法以通知我的方式将自己挂接到虚拟机中before an O
  • Redis如何存储关联数组?设置、散列还是列表?

    我对 Redis 的所有可用存储选项有点困惑 我想做一些简单的事情 并且不想过度设计它 我正在与phpredis and Redis v2 8 6 我有一个需要存储的简单关联数组 我还需要能够通过其键检索项目并循环遍历所有项目 a arra
  • 节拍匹配算法

    我最近开始尝试创建一个移动应用程序 iOS Android 它将自动击败比赛 http en wikipedia org wiki Beatmatching http en wikipedia org wiki Beatmatching 两

随机推荐

  • 基于vivado实现FFT/IFFT

    文章目录 前言 一 基本过程 二 vivado配置 1 新建工程 2 调用DDS的IP核 2 调用FFT的IP核 三 编写Verilog程序 1 顶层文件fft v 2 仿真文件fft tb v 四 运行仿真 1 运行仿真设置 2 仿真波形
  • 二叉树的性质

    二叉树的性质以及满二叉树 完全二叉树 性质一 在二叉树的第i层 最多有2的 i 1 次方个结点i gt 1 性质二 深度为k的二叉树上最多有含有2的k次方 1个结点 k gt 1 性质三 对于任何一个二叉树 若它含有n0个叶子结点 n2个度
  • Spring Bean自动装配的简介

    转自 Spring Bean自动装配的简介说明 Spring Bean装配为依赖关系注入 Spring Bean装配方式称之为 Spring Bean依赖注入方式Spring Bean容器拥有多种装配Bean方式 如 使用XML 装配Bea
  • 数据科学—K均值算法实践

    K均值算法实践 问题描述 目标 数据集 分析 算法阐述 代码实现 结果 问题描述 现在有一组数据 需要通过聚类方法发掘其内在结构 目标 对数据进行聚类分析 将数据分为四类 k 4 数据集 clusterdata txt存储待聚类数据 共包含
  • jQuery操作CheckBox的方法(选中,取消,取值)详解

  • 通讯协议024——全网独有的OPC AE知识四之接口(八)

    本文简单介绍OPC AE规范的IOPCEventAreaBrowser接口的相关知识 更多通信资源请登录网信智汇 wangxinzhihui com OPC AE规范描述了OPC事件服务器应该实现的对象和接口 实现在多个OPC客户端间共享事
  • 2.5.6 共享分区CPU分配

    最后更新2021 07 27 共享分区CPU分配这个动作是系统Hypervisor自动完成的 我们只能通过HMC定义规则 但不能直接干预 CPU分配受几个限定参数影响 分别是Physical Processor 物理CPU 分配数量 Vir
  • Spring MVC视图解析器简介说明

    转自 Spring MVC视图解析器简介说明 Spring MVC视图解析器简介说明 下文讲述 Spring MVC视图 的相关说明 如下所示 Spring 视图解析器 Spring视图解析器用于对Spring中的视图进行解析 如下配置所示
  • 大话西游详细解读

    其实要理清 大话西游 的脉络 只要弄清楚命运对至尊宝的安排 和他面对命运和爱情的心路历程就够了 如果再理一下紫霞和白晶晶的故事 大话西游 的故事就纤毫毕现了 如下 至尊宝的故事 无奈的命运与无望的爱至尊宝原来是家在五岳山第四编101号B1的
  • 2023年IT行业就业前景分析,准职场人必看!

    随着疫情的放开 2022已接近尾声 新的一年即将来临 作为打工人最关心的肯定是2023年的就业市场以及行业未来发展前景 如何最直观地看待这个行业是否还有前景 最好的方式就是看市场需求 作为准职场人的你 速速关注起来 根据智联招聘10月发布的
  • 学习笔记——JDBC

    初识JDBC 文章目录 初识JDBC 一 JDBC是什么 二 使用步骤 1 JDBC开发前的准备工作 1 1 下载对应驱动的jar包 1 2 针对文本编辑器的方式开发的配置 1 3针对编译软件 例如IDEA开发的配置 2 JDBC编程 2
  • 立创梁山派GD32F450ZGT6--屏幕扩展板LVGL应用

    该文章工程是基于裸机情况下运行的LVGL 通过GUI Guider 1 4 0进行页面布局配置 一 介绍 GUI Guider是恩智浦为LVGL开发了一个上位机GUI设计工具 可以通过拖放控件的方式设计LVGL GUI页面 加速GUI的设计
  • 大语言模型之十-Byte Pair Encoding

    Tokenizer 诸如GPT 3 4以及LlaMA LlaMA2大语言模型都采用了token的作为模型的输入输出 其输入是文本 然后将文本转为token 正整数 然后从一串token 对应于文本 预测下一个token 进入OpenAI官网
  • 攻防世界 Morse writeup

    题目 三 题型 crypto 题目 Morse 来源 攻防世界 https adworld xctf org cn challenges list 思路 直接利用摩斯密码进行解密 具体步骤 Step1 根据题目猜测是摩斯密码 Step2 将
  • 2019最近计算机毕业设计-题目汇总大全-系列5

    javaweb python爱好者 如果对以下项目感兴趣可以邮箱 cswork2019 163 com 与我沟通交流 课题名称 备注 区块链交易信息的获取与可视化分析 基于2D物理引擎 液体 的H5小游戏 基于Cocos2D的微信小游戏的设
  • 高校圆桌派第三期话题征集强势来袭~

    高校圆桌派 话题风暴等你来 即日起参与 高校圆桌派 活动 就有机会获得CSDN高校圆桌大礼包和CSDN周边礼品免费包邮送到家 高校圆桌派第二期话题征集结果公示 1 刚毕业的程序员有必要执着于进入大厂吗 小厂和大厂怎么选择 2 新能源汽车行业
  • 最简单的获取安卓应用sha1值的方法

    每个安卓应用都有一个签名证书 签名证书可以由jdk生成 当证书生成后 证书就有其sha1值 md5值和sha256值 使用此证书打包后的apk 也有其一样的sha1值 md5值和sha256值 有两种方法可以获取sha1值 1 解压apk
  • 百度:度度熊有一个N个数的数组,他想将数组从大到小排好序...

    度度熊有一个N个数的数组 他想将数组从大到小排好序 但是萌萌的度度熊只会下面这个操作 任取数组中的一个数然后将它放置在数组的最后一个位置 问最少操作多少次可以使得数组从小到大有序 输入描述 首先输入一个正整数N 接下来的一行输入N个整数 N
  • 缤纷多彩的404页面(404.html)

    文章来源 https www skyqian com archives 404 Pages html 一般而言 第一时间会在博客更新 CSDN随缘更新 引言 别离滋味浓于酒 著人瘦 此情不及墙东柳 春色年年如旧 勿埋我心 404是个很常见的
  • Redis以及Jedis的GEO地图功能

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