Redis GEO实现附近的人功能

附近的人功能是社交应用中非常常见的一项功能,它允许用户查找并发现他们周围的其他用户。使用Redis的GEO特性来实现这一功能是非常高效和简单的。以下是实现这一功能的基本步骤:

1. 准备工作

确保你的Redis服务器版本支持GEO特性(3.2.0及以上版本)。

2. 存储用户位置

使用GEOADD命令将用户的地理位置信息存储到Redis中。

GEOADD users:locations longitude latitude username

例如:

GEOADD users:locations -74.0059 40.7128 user1

这里,users:locations是键名,用于存储所有用户的位置信息,longitudelatitude分别是经度和纬度,username是用户名。

3. 更新用户位置

当用户移动时,使用GEOADD更新他们的位置信息。

4. 查找附近的人

使用GEORADIUSGEORADIUSBYMEMBER命令查找附近的人。

GEORADIUS users:locations -74.0059 40.7128 10 km

这个命令会找到距离给定位置(这里是纽约市的一个位置)10公里范围内的所有用户。

5. 实现细节

以下是使用Java实现的简单示例:

import redis.clients.jedis.Jedis;
import java.util.List;public class NearbyPeople {private Jedis jedis;public NearbyPeople(String host, int port) {this.jedis = new Jedis(host, port);}public void addLocation(String username, double longitude, double latitude) {jedis.geoadd("users:locations", longitude, latitude, username);}public List<String> findNearbyPeople(String centerUsername, double radius) {// 假设我们已经有了centerUsername的经纬度信息// 这里只是示例,实际中需要根据centerUsername获取经纬度double[] centerLocation = jedis.geopos("users:locations", centerUsername);return jedis.georadius("users:locations", centerLocation[0], centerLocation[1], radius, "km");}public static void main(String[] args) {NearbyPeople nearbyPeople = new NearbyPeople("localhost", 6379);// 添加用户位置信息nearbyPeople.addLocation("user1", -74.0059, 40.7128);nearbyPeople.addLocation("user2", -74.0100, 40.7000);// 查找附近的人List<String> nearby = nearbyPeople.findNearbyPeople("user1", 10);System.out.println("Nearby people: " + nearby);}
}

注意事项

  • 确保位置数据是准确的,因为GEO查询的准确性取决于输入数据的准确性。
  • 考虑到性能和内存使用,当存储大量用户位置数据时,需要适当优化。

通过这些步骤,你可以使用Redis的GEO特性实现一个高效的“附近的人”功能。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/813431.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

fs.writeFile写入文件后 通过路径获取文件 获取不到最新写入的文件

通过fs.writeFile 直接通过路径获取文件 发现一直是首次上传的图片 不是当前最新上传的图片 const fs uni.getFileSystemManager()fs.writeFile({ilePath: ${uni.env.USER_DATA_PATH}/avatar.png,data: imageData.replace(/^data:image\/\w;base64,/,),encoding: base64,succe…

The Great Equalizer

# The Great Equalizer ## 题面翻译 Tema 购买了一台老旧设备&#xff0c;设备上有一个小屏幕和一个磨损的铭文“伟大的平衡器”。 卖家说&#xff0c;这台设备需要提供一个整数数组 $a$ 作为输入&#xff0c;之后“伟大的平衡器”将按照以下方式工作&#xff1a; 1. 将当前数组…

OSCP靶场--Fail

OSCP靶场–Fail 考点(rsync未授权覆盖公钥Fail2ban提权) 1.nmap扫描 ## ┌──(root㉿kali)-[~/Desktop] └─# nmap -sV -sC 192.168.153.126 -p- -Pn --min-rate 2500 Starting Nmap 7.92 ( https://nmap.org ) at 2024-04-12 23:34 EDT Warning: 192.168.153.126 giving …

招生管理|基于SprinBoot+vue的招生管理系统系统设计与实现(源码+数据库+文档)

招生管理目录 基于SprinBootvue的招生管理系统设计与实现 一、前言 二、系统设计 三、系统功能设计 前台 后台 教师权限 学生权限&#xff1a; 四、数据库设计 五、核心代码 六、论文参考 七、最新计算机毕设选题推荐 八、源码获取&#xff1a; 博主介绍&#xff…

大数据------JavaWeb------JDBC(完整知识点汇总)

JDBC 定义 全称为Java数据库连接&#xff08;Java DataBase Connectivity&#xff09;&#xff1a;是使用java语句来操作所有关系型数据库的一套API JDBC本质 它是官方定义的一套操作所有关系型数据库的规则&#xff08;即接口&#xff09;&#xff0c;各个数据库厂商会去实现…

Java 9 新特性

Java 9 新特性 Java 9 发布于 2017 年 9 月 22 日&#xff0c;带来了很多新特性&#xff0c;其中最主要的变化是已经实现的模块化系统。接下来我们会详细介绍 Java 9 的新特性。 Java 9 新特性 模块系统&#xff1a;模块是一个包的容器&#xff0c;Java 9 最大的变化之一是引…

VLC-Qt实现简单的视频播放器

VLC-Qt是一个结合了Qt应用程序和libVLC的免费开源库。它提供了用于媒体播放的核心类&#xff0c;以及用于快速开发媒体播放器的GUI类。由于集成了整个libVLC&#xff0c;VLC-Qt具备了libVLC的所有特性&#xff0c; 例如&#xff1a;libVLC实例和播放器、单个文件和列表播放、音…

.NET i18n 多语言支持与国际化

环境 WIN10 VS2022 .NET8 1.&#x1f44b;创建项目 2.&#x1f440;创建Resources Controllers HomeController.en.resx HomeController.fr.resx HomeController.zh.resx 3.&#x1f331;Program.cs添加国际化支持 // 添加国际化支持 builder.Services.AddLocalization(…

6.Hexo标签插件和资产文件夹

标签插件 标签插件&#xff0c;基本上是只是一些小的代码片段&#xff0c;可以将他们添加到markdown文件中 以便添加特定的代码&#xff0c;不需要编写复杂或混乱的HTML 当很多时候想要在markdown页面添加一些特殊元素&#xff0c;通常必须使用HTML 如果不想这么用HTML&#…

CSS特效---百分比加载特效

1、演示 2、一切尽在代码中 <!DOCTYPE html> <html lang"en"><head><meta charset"UTF-8" /><meta name"viewport" content"widthdevice-width, initial-scale1.0" /><title>Document</title&…

公众号文章如何添加多个附件?

在公众号分享一些文档给粉丝下载&#xff0c;有那么几种方式。比如把文档转成超链接&#xff0c;放在公众号的“阅读原文”处&#xff0c;或者把文件转成二维码&#xff0c;贴在公众号文章里面。这两种方式其实都需要先把文件转成超链接&#xff08;网页链接&#xff09;&#…

开发需求15-使用el-checkbox组件实现el-tree组件的父子关联关系(非全选/全不选)

需求描述: 大家都知道el-tree可以很明显的通过选中来体现上下节点的父子选中状态,那么如果要求把后端把el-tree的数据结构,通过一个展开的list返回给你,使用el-checkbox组件渲染每一个节点,同时要求选中某一个节点,同时可以选中其父节点和子节点;取消也是一样。 思路:…

【目标检测数据集】VOC2007 数据集介绍

一、介绍 VOC 数据是 PASCAL VOC Challenge 用到的数据集&#xff0c;官网&#xff1a;http://host.robots.ox.ac.uk/pascal/VOC/ 备注&#xff1a;VOC数据集常用的均值为&#xff1a;mean_RGB(122.67891434, 116.66876762, 104.00698793) Pytorch 上通用的数据集的归一化指…

OVITO-2.9版本

关注 M r . m a t e r i a l , \color{Violet} \rm Mr.material\ , Mr.material , 更 \color{red}{更} 更 多 \color{blue}{多} 多 精 \color{orange}{精} 精 彩 \color{green}{彩} 彩&#xff01; 主要专栏内容包括&#xff1a; †《LAMMPS小技巧》&#xff1a; ‾ \textbf…

岛屿个数(dfs)

[第十四届蓝桥杯省B 岛屿个数] 小蓝得到了一副大小为 M N MN MN 的格子地图&#xff0c;可以将其视作一个只包含字符 0 0 0&#xff08;代表海水&#xff09;和 1 1 1&#xff08;代表陆地&#xff09;的二维数组&#xff0c;地图之外可以视作全部是海水&#xff0c;每个岛…

C++递推算法

位数问题 #include<bits/stdc.h> using namespace std; void f(int); int a[100][100]; int b[100][100]; int n; int main() {cin>>n;long long x0;for(int i1;i<n;i){xx*10;}long long y0;long long tx;for(int i1;i<n;i){yyt*9;tt/10;}int sum0;int summ…

守护数据安全:如何应对.360、.halo勒索病毒的攻击

尊敬的读者&#xff1a; 近年来&#xff0c;网络安全问题日益严重&#xff0c;各种病毒、木马、勒索软件层出不穷。其中&#xff0c;.360、.halo勒索病毒因其独特的传播方式和恶意行为而备受关注。本文将对该病毒进行深入剖析&#xff0c;并提出相应的应对策略&#xff0c;帮助…

蓝桥杯易错点汇总

1.当想输入一个数字再输入一个字符串要多一个nextLine(); int a scan.nextInt(); String b scan.nextLine(); 在Java编程语言中&#xff0c;使用Scanner类进行输入时&#xff0c;需要注意nextInt()和nextLine()方法的使用。nextInt()用于读取下一个整数&#xff0c;而nextLi…

基于SSM+Vue的宠物销售系统设计与实现

附录,系统运行视频 一、引言 随着互联网的快速发展,电子商务已经成为人们日常生活中不可或缺的一部分。在这个背景下,宠物销售系统应运而生,为宠物爱好者提供了一个便捷、高效的在线购买、领养宠物的平台。本文旨在介绍一个基于SSM(Spring+SpringMVC+MyBatis)框架和Vue…

系统架构最佳实践 -- 一般优惠券平台系统架构设计

优惠券是商城的一种基础的营销工具&#xff0c;在目前c端用户对于电子优惠券已经非常熟悉的情况下&#xff0c;一般自营商城的营销活动系统&#xff0c;都是从优惠券开始搭建。 一、名词定义 基于个人理解&#xff0c;为方便表述&#xff0c;首先对可能产生歧义的名词进行如下…