Redis 实现 查找附近的人 功能

news2024/10/9 14:01:59

文章目录

      • 概述
      • Redis 中 Geospatial(地理位置)
      • Demo例子
      • 总结

概述

使用 Redis 实现“查找附近的人”功能,通常会依赖 Redis 的 Geo(地理位置) 数据类型来存储用户的经纬度,并基于此进行地理范围查询。Redis 通过 GEOADDGEORADIUS 等命令来存储用户位置和查找一定范围内的用户。

存储用户的地理位置:我们需要存储用户的经纬度信息,以便后续可以基于此进行地理查询。Redis 提供了 GEOADD 命令,允许将用户的经纬度信息存储在 Redis 中的有序集合中(底层基于 ZSet 实现)。

根据当前用户的位置查找附近的用户 :使用 GEORADIUSGEORADIUSBYMEMBER 命令,基于某个位置的经纬度或某个已有用户的位置,查询一定范围内的其他用户。

Redis 中 Geospatial(地理位置)

  • 描述:Redis 提供对地理位置的支持,允许存储经纬度坐标并基于此进行地理范围内的查询。
  • 常用命令
    • GEOADD key longitude latitude member:将地理空间信息添加到 key 中。
    • GEODIST key member1 member2:计算两个成员之间的距离。
    • GEORADIUS key longitude latitude radius:查询指定半径内的所有成员。
    • GEOPOS key member:返回成员的经纬度。

Demo例子

public class NearbyPeopleService {

    private Jedis jedis;

    public NearbyPeopleService() {
        // 连接 Redis
        jedis = new Jedis("localhost", 6379);
    }

    /**
     * 添加用户的地理位置信息
     *
     * @param userId    用户的唯一标识
     * @param longitude 经度
     * @param latitude  纬度
     */
    public void addUserLocation(String userId, double longitude, double latitude) {
        String key = "user_locations"; // 存储用户位置的 key
        jedis.geoadd(key, longitude, latitude, userId); // 使用 GEOADD 存储用户位置
        System.out.println("Added user location: " + userId);
    }

    /**
     * 查找附近的人
     *
     * @param longitude 当前用户的经度
     * @param latitude  当前用户的纬度
     * @param radius    查找半径
     * @return 附近的用户列表
     */
    public List<GeoRadiusResponse> findNearbyPeople(double longitude, double latitude, double radius) {
        String key = "user_locations"; // 存储用户位置的 key
        // 使用 GEORADIUS 查找附近的用户
        List<GeoRadiusResponse> nearbyPeople = jedis.georadius(key, longitude, latitude, radius, GeoUnit.KM);
        return nearbyPeople;
    }

    public static void main(String[] args) {
        NearbyPeopleService service = new NearbyPeopleService();

        // 假设有几个用户的地理位置
        service.addUserLocation("user1", 116.4074, 39.9042);  // 北京
        service.addUserLocation("user2", 121.4737, 31.2304);  // 上海
        service.addUserLocation("user3", 113.2644, 23.1291);  // 广州
        service.addUserLocation("user4", 114.0579, 22.5431);  // 深圳

        // 查找北京附近 1500 公里以内的用户
        List<GeoRadiusResponse> nearbyPeople = service.findNearbyPeople(116.4074, 39.9042, 1500);
        System.out.print("北京附近 1500 公里以内的用户:");
        for (GeoRadiusResponse response : nearbyPeople) {
            System.out.print(response.getMemberByString() + " "); // 输出附近的用户 ID
        }
    }
}

结果:
在这里插入图片描述

总结

Redis 的 Geo 功能非常适合用于处理与地理位置相关的需求,尤其是在需要高效地进行地理范围查询、距离计算或位置排序的场景中。由于 Redis 是内存存储,Geo 操作的性能通常非常高,适合需要实时处理地理数据的应用场景,如社交、物流、旅游、共享经济等领域。

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

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

相关文章

最新价值5000元的V2M2引擎传奇源码2024BLUE升级版 团购

最新团购的V2M2引擎源码2024年BLUE升级版 特点优势是最新XE12编辑器&#xff0c;微端&#xff0c;各种自定义UI 无限仿GOM引擎功能 参考地址&#xff1a;最新价值5000元的V2M2引擎传奇源码2024BLUE升级版[原始团购版]_1234FCOM专注游戏工具及源码例子分享下载地址:BlueCodePXL…

.gitignore文件不起作用,GitHub和GitHubDeskTOP

问题&#xff1a;使用github或者github桌面版的时候配置的.gitignore文件不起作用&#xff0c;.gitignore文件是最新的&#xff0c;没有问题&#xff0c;只是提交的的时候Library、UserSettings这些文件还都一直在&#xff0c;尝试了大家说的清缓存等等方法&#xff0c;仍然没有…

代码随想录训练营Day28 | 39. 组合总和 | 40.组合总和II | 131.分割回文串

学习文档&#xff1a;代码随想录 (programmercarl.com) 学习视频&#xff1a;代码随想录算法公开课 | 最强算法公开课 | 代码随想录 (programmercarl.com) Leetcode 39. 组合总和 题目描述 给你一个 无重复元素 的整数数组 candidates 和一个目标整数 target &#xff0c;找…

springboot医院预约挂号系统

基于springbootvue实现的医院预约挂号系统 &#xff08;源码L文ppt&#xff09;4-085 4.1系统功能模块设计 医院预约挂号系统与数据分析系统在设计与实施时&#xff0c;采取了模块性的设计理念&#xff0c;把相似的系统的功能整合到一个模组中&#xff0c;以增强内部的功能…

谷粒商城踩坑

1.mysql表名大小写问题&#xff08;P16&#xff09; 问题描述&#xff1a;代码要求的是表名大写&#xff0c;但实际上数据库是小写的&#xff0c;就报错&#xff1a; 问题解决&#xff1a;未解决 mysql版本为5.7.44。网上有两种解决方式&#xff0c;但是都解决不了 1.1 解决方…

国药准字:您购药的可靠指南

益安宁丸为同溢堂药业有限公司所独家生产的一款中成药&#xff0c;在内地市场和港澳地区均有上市。 益安宁丸真品的唯一标准&#xff1a;无论港版还是内地版&#xff0c;包装盒必然有国药准字Z20063087标识&#xff0c;但凡没有国药准字标识的必为假药。

【C++】:bind绑定器和function函数对象机制

欢迎来到 破晓的历程的 博客 ⛺️不负时光&#xff0c;不负己✈️ 文章目录 引言function函数对象function引入细讲function体验function在工程实践中的优势 模拟实现function函数对象机制bind绑定器基本语法示例1. 绑定普通函数2. 使用占位符3. 绑定成员函数4. 绑定 lambda 表…

【Android Studio】基础入门(一)—— 创建第一个 Android 项目

文章目录 前言一、创建项目二、启动模拟器三、运行程序 前言 Android Studio是谷歌官方推出的免费集成开发环境&#xff0c;专为安卓应用开发而设计&#xff0c;集成了代码编写、调试、界面设计及性能分析等多种强大功能&#xff0c;支持Java和Kotlin语言&#xff0c;极大提升了…

【vue2.7.16系列】手把手教你搭建后台系统__搭建开发环境(1)

安装开发环境 安装nodejs 使用nvm管理多个node版本。nvm-npm-nrm-配置介绍。本系列文章使用node14.19.3&#xff0c;安装好node后&#xff0c;npm也就安装好了&#xff0c;npm版本是v6.14.7 安装vue/cli 5.0.8 npm install -g vue/cli创建项目 vue create admin # 选项&am…

Compose 一个联系人索引列表实现

一、前言 该功能是一个左侧为字符索引列表&#xff0c;右侧为联系人列表的实现&#xff0c;点击左侧字符索引可以自动滑动到对应联系人条目。该功能代码实现绝大多数有通义灵码完成。实现效果如下&#xff1a; 关键代码 data class Contact(val name: String)class Contact…

unix中如何申请进程调度的优先级

一、前言 unix系统中&#xff0c;进程的调度是由内核决定的。在一个系统中&#xff0c;进程的优先级越高&#xff0c;表示其在一定时间中占用cpu的时间越久。本文将介绍unix系统如何修改以及获取进程的优先级。 二、nice值 nice值是unix系统中用于表征进程优先级的一个参数。…

MES系统中的正向追溯与反向追溯管理

随着制造业的日益发展&#xff0c;生产过程中的质量控制和管理变得尤为关键。MES系统作为一种实现车间生产管理和控制的重要工具&#xff0c;其追溯功能在生产过程中起着至关重要的作用。 一、MES系统概述 MES系统是一套面向制造企业车间执行层的生产信息化管理系统。它通过对…

药品名不得命名保健食品

益安宁丸为同溢堂药业有限公司所独家生产的一款中成药&#xff0c;在内地市场和港澳地区均有上市。

如何在算家云搭建MuseTalk(数字人)

一、 MuseTalk 简介 MuseTalk 是由腾讯团队开发的先进技术&#xff0c;它是一个实时的音频驱动唇部同步模型。该模型能够根据输入的音频信号&#xff0c;自动调整数字人物的面部图像&#xff0c;使其唇形与音频内容高度同步。 二、 MuseTalk 一键使用 基础环境最低要求说明&…

肺结节分割与提取系统(基于传统图像处理方法)

Matlab肺结节分割(肺结节提取)源程序&#xff0c;GUI人机界面版本。使用传统图像分割方法&#xff0c;非深度学习方法。使用LIDC-IDRI数据集。 工作如下&#xff1a; 1、读取图像。读取原始dicom格式的CT图像&#xff0c;并显示&#xff0c;绘制灰度直方图&#xff1b; 2、图像…

深圳市步步精科技有限公司荣获发明专利,彰显技术研发实力

2024年8月13日&#xff0c;深圳市步步精科技有限公司&#xff08;BBJconn&#xff09;正式获得了其新开发的防水连接器专利&#xff0c;授权公告号为CN 118352837 B。这项技术的突破标志着公司在连接器领域的持续创新&#xff0c;进一步巩固了其行业领先地位。 专利技术概述 此…

JavaScript 常用输出语句详解

目录 非 VIP 用户可前往公众号“前端基地”进行免费阅读 alert弹出警告框 Console 控制台输出 Document.write 直接在文档中显示 Prompt 弹出用户输入对话框 非 VIP 用户可前往公众号“前端基地”进行免费阅读 alert弹出警告框 在 JavaScript 中,alert可用于弹出…

Android Preference的使用以及解析

简单使用 values.arrays.xml <?xml version"1.0" encoding"utf-8"?> <resources><string-array name"list_entries"><item>Option 1</item><item>Option 2</item><item>Option 3</item&…

【权威出版|稳定检索】2024年信息学、网络与计算机应用技术国际会议(INCAT 2024)

2024 International Conference on Informatics, Networking, and Computer Application Technology 【1】大会信息 会议名称&#xff1a;2024年信息学、网络与计算机应用技术国际会议 会议简称&#xff1a;INCAT 2024 大会时间&#xff1a;请查看官网 大会地点&#xff1a;中…

携程酒店含价格全国城市分析1

在做一些城市分析、学术研究分析、商业选址、商业布局分析、住宿业分析等数据分析挖掘时&#xff0c;携程酒店的数据参考价值非常大&#xff0c;可以从酒店档次、分布、价格、特色服务等多维度来分析研究。 具体分析研究的字段维度包括酒店名、星级、星级类型、酒店标签、酒店…