【Redis】之Geo
概述
Geo就是Geolocation的简写形式,代表地理坐标。在Redis中,构造了能够存储地址坐标信息的一种数据结构,帮助我们根据经纬度来检索数据。
命令行操作方法
GEOADD
可以用来添加一个或者多个地理坐标。


GEODIST
返回一个key中两个成员之间的距离。


GEOHASH
将指定member的坐标转为哈希字符串形式返回。


GEOPOS
返回指定member的坐标。


GEORADIUS
指定圆心、半径,找到该圆内包含的member。

GEOSEARCH
在指定范围内搜索member。最新的一个命令,可以指定中心点的经纬度,也可以使用member;并且还可以指定搜索范围是圆形还是正方形。

StringRedisTemplate操作方法
add
用于添加地理坐标。

@Resourceprivate StringRedisTemplate stringRedisTemplate;@Testpublic void test(){Point point = new Point(112.653652,37.809874);Long add = this.stringRedisTemplate.opsForGeo().add("ShanXi", point, "SXU");System.out.println(add);}
radius
用来查找坐标

@Resourceprivate StringRedisTemplate stringRedisTemplate;@Test void test() {// 中心点Point point = new Point(112.617734,37.797128);// 半径Distance radius = new Distance(100, RedisGeoCommands.DistanceUnit.KILOMETERS);// 由中心点和半径组成的圆圈Circle circle = new Circle(point, radius);// 获取值之后要带回来的参数RedisGeoCommands.GeoRadiusCommandArgs args = RedisGeoCommands.GeoRadiusCommandArgs.newGeoRadiusArgs().includeDistance() // 包含距离.includeCoordinates() // 包含坐标.sortAscending(); // 升序// 进行查询GeoResults<RedisGeoCommands.GeoLocation<String>> search =this.stringRedisTemplate.opsForGeo().radius("ShanXi", circle, args);List<GeoResult<RedisGeoCommands.GeoLocation<String>>> content = search.getContent();if(content == null || content.isEmpty()) {System.out.println("没有数据");}for (GeoResult<RedisGeoCommands.GeoLocation<String>> geoLocationGeoResult : content) {// 输出距离System.out.println("距离:" + geoLocationGeoResult.getDistance());RedisGeoCommands.GeoLocation<String> locationGeoResultContent = geoLocationGeoResult.getContent();// 输出名称System.out.println("member:" + locationGeoResultContent.getName());// 输出坐标System.out.println("坐标" + locationGeoResultContent.getPoint());}}
search
和radius方法类似,只不过search还可以查找矩形范围之内的坐标。

remove
删除操作

@Resourceprivate StringRedisTemplate stringRedisTemplate;@Test void test() {Long remove = this.stringRedisTemplate.opsForGeo().remove("ShanXi", "TaiYuanXueYuan");System.out.println(remove);}
distance
查看两个地理位置之间的直线距离

@Resourceprivate StringRedisTemplate stringRedisTemplate;@Test void test() {Distance distance = this.stringRedisTemplate.opsForGeo().distance("ShanXi", "SXU", "ZonBei");System.out.println(distance);}
代码示例
需求:山西所有高校建立之后,都会把自己的位置上传到某信息平台,并且还会查询距离自己学校30公里之内的其他学校。当学校换位置之后,就会删除当前信息。
基础配置
@RestController
@RequestMapping("/school")
public class SchoolController {@Resourceprivate SchoolService schoolService;}
@Service
public class SchoolService extends ServiceImpl<SchoolMapper, School> {@Resourceprivate StringRedisTemplate stringRedisTemplate;}
public interface SchoolMapper extends BaseMapper<School> {
}
@Data
public class School {// 学校idprivate Integer id;// 学校名private String name;// 经度private BigDecimal longitude;// 纬度private BigDecimal latitude;}
上传位置信息
public String add(School school) {// TODO 更新信息到数据库boolean save = this.save(school);// TODO 判断是否更新成功if(save) {// TODO 封装位置信息Point point = new Point(school.getLongitude().doubleValue(), school.getLatitude().doubleValue());// TODO 存入数据库this.stringRedisTemplate.opsForGeo().add("GEO:SCHOOL", point, school.getName());}return "成功";}
查询附近学校
public void queryMessage() {// 距离Distance distance = new Distance(30, RedisGeoCommands.DistanceUnit.KILOMETERS);// 参数RedisGeoCommands.GeoRadiusCommandArgs args = RedisGeoCommands.GeoRadiusCommandArgs.newGeoRadiusArgs().includeDistance() // 包含距离.includeCoordinates() // 包含坐标.sortDescending(); // 降序// 开始查找GeoResults<RedisGeoCommands.GeoLocation<String>> results = this.stringRedisTemplate.opsForGeo().radius("GEO:SCHOOL", "SXU", distance, args);List<GeoResult<RedisGeoCommands.GeoLocation<String>>> content = results.getContent();// 输出结果for (GeoResult<RedisGeoCommands.GeoLocation<String>> geoLocationGeoResult : content) {System.out.println("距离山西大学30公里之内大学的名称:" + geoLocationGeoResult.getContent().getName());System.out.println("距离山西大学30公里之内大学的坐标:" + geoLocationGeoResult.getContent().getPoint());System.out.println("距离山西大学30公里之内大学的距离:" + geoLocationGeoResult.getDistance());}}
删除位置信息
public boolean remove(String name) {LambdaQueryWrapper<School> lambdaQueryWrapper = new LambdaQueryWrapper<>();lambdaQueryWrapper.eq(School::getName, name);boolean subtract = this.remove(lambdaQueryWrapper);if(!subtract) {return false;}Long remove = this.stringRedisTemplate.opsForGeo().remove("GEO:SCHOOL", name);return remove != null && remove == 1;}
相关文章:
【Redis】之Geo
概述 Geo就是Geolocation的简写形式,代表地理坐标。在Redis中,构造了能够存储地址坐标信息的一种数据结构,帮助我们根据经纬度来检索数据。 命令行操作方法 GEOADD 可以用来添加一个或者多个地理坐标。 GEODIST 返回一个key中两个成员之…...
常用的k8s容器网络模式有哪些?
常用的k8s容器网络模式包括Bridge模式、Host模式、Overlay模式、Flannel模式、CNI(ContainerNetworkInterface)模式。K8s的容器网络模式多种多样,每种模式都有其特点和适用场景。Bridge模式适用于简单的容器通信场景;Host模式适用…...
4位整数的数位和
输入一个4位数的整数,求其各数位上的数字之和。 输入格式: 输入在一行中给出1个4位的正整数n。 输出格式: 在一行中输出n的各数位上的数字之和。 输入样例: 1234输出样例: 10 代码如下: #include<stdio.h> int main() {int n;int a,b,c,d;scanf(&…...
XHTML学习
XHTML学习 1.XHTML 简介2.XHTML - 元素标准3.XHTML - 属性标准 1.XHTML 简介 XHTML是一个严格遵循 XML语法规则的 HTML 标准。它是 HTML4 的一种重构版本,结合了 HTML 的灵活性和 XML 的严格性,如今XHTML已经得到了所有主流浏览器的支持 与 HTML 相比最…...
KTH7823——16 位高精度低延时霍尔磁编码器可编程 ABZ 和 PWM 输出模式角度传感器
KTH7823 是一款高精度绝对角度霍尔传感器芯片,最高 16 位分辨率绝对角度输出,可 实现在轴向和离轴场合下的无接触式磁场角度测量。不论转速范围在 0-120000rpm 之间, KTH7823 都能快速准确地输出角度信息,适用于需要精准角…...
JDBC笔记
文章目录 准备MySQL数据的建立和建表 idea 建工程和模块设置属性配置文件编写JDBC代码URL的设置JDBC 代码配置文件 准备MySQL 数据的建立和建表 idea 建工程和模块 设置属性配置文件 编写JDBC代码 URL的设置 JDBC 代码 package com.yanyu;import java.sql.*; import java.util…...
小众语言ruby在苹果中的初步应用
前言 感觉Ruby在苹果系统中充当一种脚本语言来使用。 1、直接输入ruby没有反应 2、可显示结果的命令 ruby -e "puts Goodbye, cruel world!" 效果如下图: 说明苹果系统中ruby已经安装完毕,或者就是自带的。 3、编辑运行第一个ruby程序 输入…...
Nature: 一种基于宏基因组序列空间生成无参考的蛋白质家族的计算方法
通过全局宏基因组学揭示功能性暗物质 Unraveling the functional dark matter through global metagenomics Article, 2023-10-11 Nature [IF: 64.8] DOI: https://doi.org/10.1038/s41586-023-06583-7 原文链接:https://www.nature.com/articles/s41586-023-06…...
play-with-docker使用指南
Play-with-Docker(PWD)是一个在线平台,提供免费的 Docker 实验环境。它允许用户在浏览器中创建和管理 Docker 容器,适合学习和实验。国内访问需要借助于魔法工具,否则可能无法访问哦。 网站地址:https://labs.play-with-docker.com/ 一、登录play-with-docker 点击页面上…...
常见中间件漏洞靶场(tomcat)
1.CVE-2017-12615 开启环境 查看端口 查看IP 在哥斯拉里生成一个木马 访问页面修改文件后缀和文件内容 放包拿去连接 2.后台弱⼝令部署war包 打开环境 将前边的1.jsp压缩成1.zip然后改名为1.war 访问页面进行上传 在拿去连接 3.CVE-2020-1938 打开环境 访问一下 来到kali …...
一文读懂SpringCLoud
一、前言 只有光头才能变强 认识我的朋友可能都知道我这阵子去实习啦,去的公司说是用SpringCloud(但我觉得使用的力度并不大啊~~)… 所以,这篇主要来讲讲SpringCloud的一些基础的知识。(我就是现学现卖了,主要当做我学习SpringCloud的笔记吧&…...
tcpdump使用方法
一、centos上可以采用下面的命令进行安装。 yum install tcpdump 二、实例: 1、监视指定网络接口的数据包 即监听指定网卡的数据包,若不指定网卡,默认tcpdump只会监视第一个网络接口。如监听 eth0网卡,如下: tcpd…...
密码字典txt python密码字典代码
由于生成的密码数量非常庞大,这个过程可能需要非常长的时间来完成,并且会占用大量的磁盘空间。 链接: 密码字典下载地址610.4M 提取码: w8bi...
ubuntu安装emqx
目录 1.预先下载好emqx压缩包 2.使用tar命令解压 3.进入bin目录 5.放开访问端口18083 6.从通过ip地址访问emqx后台 7.默认用户名密码为admin/public 8.登录后台 9.资源包绑定在此博文可自取 1.预先下载好emqx压缩包 2.使用tar命令解压 sudo tar -xzvf emqx-5.0.8-el8-…...
F28335 时钟及控制系统
1 F28335 系统时钟来源 1.1 振荡器OSC与锁相环PLL 时钟信号对于DSP来说是非常重要的,它为DSP工作提供一个稳定的机器周期从而使系统能够正常运行。时钟系统犹如人的心脏,一旦有问题整个系统就崩溃。DSP 属于数字信号处理器, 它正常工作也必须为其提供时钟信号。那么这个时钟…...
数据结构和算法之线性结构
原文出处:数据结构和算法之线性结构 关注码农爱刷题,看更多技术文章!!! 线性结构是一种逻辑结构,是我们编程开发工作应用最广泛的数据结构之一。线性结构是包含n个相同性质数据元素的有限序列。它的基本特征是&…...
3. 轴指令(omron 机器自动化控制器)——>MC_MoveAbsolute
机器自动化控制器——第三章 轴指令 4 MC_MoveAbsolute变量▶输入变量▶输入输出变量▶输入输出变量 功能说明▶指令详情▶时序图▶重启运动指令▶多重启动运动指令▶异常 示例程序1▶参数设定▶动作示例▶梯形图▶结构文本(ST) 示例程序2▶参数设定▶动作示例▶梯形图▶结构文…...
ai 回答HFS是什么 HTTP的文件服务器是什么
HFS(HTTP File Server)是一个基于HTTP协议的文件服务器软件,它允许用户通过浏览器访问和共享计算机上的文件。HFS的特点包括界面简洁直观、易于安装和配置、支持虚拟文件系统、多种权限设置等。用户可以轻松地在本地网络或互联网上共享文件和…...
OpenHarmony(鸿蒙南向开发)——小型系统内核(LiteOS-A)【内核启动】
往期知识点记录: 鸿蒙(HarmonyOS)应用层开发(北向)知识点汇总 鸿蒙(OpenHarmony)南向开发保姆级知识点汇总~ 子系统开发内核 轻量系统内核(LiteOS-M) 轻量系统内核&#…...
若依笔记(六):前后端token鉴权体系
文章目录 前端/login后端生成token后端拦截前端的动态路由简单总结下若依的前后端token鉴权体系流程: 1、前端是通过/login接口来获取jwt-token的,jwt的配置在后端的application.yml中 2、后端处理/login请求时先检验redis中验证码然后使用spring-security内部机制(过滤链)…...
生成xcframework
打包 XCFramework 的方法 XCFramework 是苹果推出的一种多平台二进制分发格式,可以包含多个架构和平台的代码。打包 XCFramework 通常用于分发库或框架。 使用 Xcode 命令行工具打包 通过 xcodebuild 命令可以打包 XCFramework。确保项目已经配置好需要支持的平台…...
iOS 26 携众系统重磅更新,但“苹果智能”仍与国行无缘
美国西海岸的夏天,再次被苹果点燃。一年一度的全球开发者大会 WWDC25 如期而至,这不仅是开发者的盛宴,更是全球数亿苹果用户翘首以盼的科技春晚。今年,苹果依旧为我们带来了全家桶式的系统更新,包括 iOS 26、iPadOS 26…...
<6>-MySQL表的增删查改
目录 一,create(创建表) 二,retrieve(查询表) 1,select列 2,where条件 三,update(更新表) 四,delete(删除表…...
Objective-C常用命名规范总结
【OC】常用命名规范总结 文章目录 【OC】常用命名规范总结1.类名(Class Name)2.协议名(Protocol Name)3.方法名(Method Name)4.属性名(Property Name)5.局部变量/实例变量(Local / Instance Variables&…...
【解密LSTM、GRU如何解决传统RNN梯度消失问题】
解密LSTM与GRU:如何让RNN变得更聪明? 在深度学习的世界里,循环神经网络(RNN)以其卓越的序列数据处理能力广泛应用于自然语言处理、时间序列预测等领域。然而,传统RNN存在的一个严重问题——梯度消失&#…...
蓝桥杯 2024 15届国赛 A组 儿童节快乐
P10576 [蓝桥杯 2024 国 A] 儿童节快乐 题目描述 五彩斑斓的气球在蓝天下悠然飘荡,轻快的音乐在耳边持续回荡,小朋友们手牵着手一同畅快欢笑。在这样一片安乐祥和的氛围下,六一来了。 今天是六一儿童节,小蓝老师为了让大家在节…...
spring:实例工厂方法获取bean
spring处理使用静态工厂方法获取bean实例,也可以通过实例工厂方法获取bean实例。 实例工厂方法步骤如下: 定义实例工厂类(Java代码),定义实例工厂(xml),定义调用实例工厂ÿ…...
leetcodeSQL解题:3564. 季节性销售分析
leetcodeSQL解题:3564. 季节性销售分析 题目: 表:sales ---------------------- | Column Name | Type | ---------------------- | sale_id | int | | product_id | int | | sale_date | date | | quantity | int | | price | decimal | -…...
Unsafe Fileupload篇补充-木马的详细教程与木马分享(中国蚁剑方式)
在之前的皮卡丘靶场第九期Unsafe Fileupload篇中我们学习了木马的原理并且学了一个简单的木马文件 本期内容是为了更好的为大家解释木马(服务器方面的)的原理,连接,以及各种木马及连接工具的分享 文件木马:https://w…...
实战三:开发网页端界面完成黑白视频转为彩色视频
一、需求描述 设计一个简单的视频上色应用,用户可以通过网页界面上传黑白视频,系统会自动将其转换为彩色视频。整个过程对用户来说非常简单直观,不需要了解技术细节。 效果图 二、实现思路 总体思路: 用户通过Gradio界面上…...

