什么是LBS

LBS(Location Based Service),基于位置的服务。

Redis和GEO

Redis 是最热门的 nosql 数据库之一,它的最大特点就是快。
所以在 LBS 这种需要大量写入和查询的应用场景中,用它来存储用户的地理位置信息最适合不过了。

Redis 的 GEO 是 3.2 版本的新特性。这个功能可以将用户给定的地理位置信息储存起来, 并对这些信息进行操作。

PS:关于三种nosql数据库这里我也做了调研,其中mongodb最大的特点是灵活,因为其数据是以json的格式存储,所以字段随时可以增加或减少;Redis的特点是快,适合单一的,简单的,大量数据的存储;HBase我没有做深入研究,它的特点是大,适合做离线缓存。在处理社交这种关系复杂的数据存储时,依然还是需要用mysql这种关系型数据库,nosql并不能完全替代。

使用

目前 redis 支持以下 6 个 GEO 的相关操作

  • geoadd:增加某个地理位置的坐标。
  • geopos:获取某个地理位置的坐标。
  • geodist:获取两个地理位置的距离。
  • georadius:根据给定地理位置坐标获取指定范围内的地理位置集合。
  • georadiusbymember:根据给定地理位置获取指定范围内的地理位置集合。
  • geohash:获取某个地理位置的geohash值。

添加位置和获取位置

GEOADD location-set longitude latitude member [longitude latitude member ...]

示例

redis> GEOADD Hangzhou 120.0919500000 30.3219600000 Xihu

获取某个地理位置的坐标

GEOPOS key member [member ...]

示例

redis> GEOPOS Hangzhou Sandun Xixi Xihu

获取两个地理位置的距离

GEODIST location-set location-x location-y [unit]

其中 unit 参数是距离单位,可选填

  • m 表示单位为米。
  • km 表示单位为千米。
  • mi 表示单位为英里。
  • ft 表示单位为英尺。

示例

redis> GEODIST Hangzhou Xihu Xixi m

根据给定地理位置坐标获取指定范围内的地理位置集合

这个功能很有用,可以用来查找周边的点

GEORADIUS location-set longitude latitude radius m|km|ft|mi [WITHCOORD] [WITHDIST] [ASC|DESC] [COUNT count]

其中:

radius表示范围距离,距离单位是 m|km|ft|mi

可选参数:

  • WITHCOORD:传入WITHCOORD参数,则返回结果会带上匹配位置的经纬度。
  • WITHDIST:传入WITHDIST参数,则返回结果会带上匹配位置与给定地理位置的距离。
  • ASC|DESC:默认结果是未排序的,传入ASC为从近到远排序,传入DESC为从远到近排序。
  • WITHHASH:传入WITHHASH参数,则返回结果会带上匹配位置的hash值。
  • COUNT count:传入COUNT参数,可以返回指定数量的结果。

示例

redis> GEORADIUS Hangzhou 120.0919500000 30.3219600000 10 km

根据给定地理位置获取指定范围内的地理位置集合

GEORADIUSBYMEMBER key member radius [m|km|ft|mi] [WITHCOORD] [WITHDIST] [ASC|DESC] [WITHHASH] [COUNT count]

和 GEORADIUS 一样,只是传入的是member名,不是坐标了

redis> GEORADIUS Hangzhou Xihu 10 km

redis错误汇总的更多相关文章

  1. Redis--狂神说Redis基础汇总(完结)

    Redis--狂神说Redis基础汇总(完结) 2021.6.12-2021.6.14:端午学学玩玩弄完了Redis基础的汇总,越学越觉得自己知识量的匮乏. 参考链接:狂神说Java--Redis汇总 ...

  2. Entity Framework学习笔记——错误汇总

    之前的小项目做完了,到了总结经验和更新学习笔记的时间了.开始正题之前先啰嗦一下,对之前的学习目标进行一个调整:“根据代码生成表”与“生成数据库脚本和变更脚本”合并为“Code First模式日常使用篇 ...

  3. 李洪强iOS开发之OC常见错误汇总

    // //  main.m //  16 - 常见错误汇总 // //  Created by vic fan on 16/7/13. //  Copyright © 2016年 李洪强. All r ...

  4. Python常见的错误汇总

    +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 错误: [错误分析]第二个参数必须为类,否则会报TypeError,所以正确的应 ...

  5. Redis 错误1067:进程意外终止,Redis不能启动,Redis启动不了

    Redis 错误1067:进程意外终止,Redis不能启动,Redis启动不了 >>>>>>>>>>>>>>> ...

  6. Redis 错误:Failed with result 'start-limit-hit'

    Redis 错误:Failed with result 'start-limit-hit' 背景 Redis 版本为 5.0.4: 文件 /etc/systemd/system/redis.servi ...

  7. PHP常见错误汇总

    日常开发和调试的时候,经常会遇到一些错误,光怪陆离的不知所以,所以,特此将错误汇总一下,借鉴!!! 1. 原因分析:  一般可能是该文件出现了问题,检查一下代码和格式,是否出现开始的地方出现了空格,或 ...

  8. Quartus II 中 Verilog 常见警告/错误汇总

    Verilog 常见错误汇总 1.Found clock-sensitive change during active clock edge at time <time> on regis ...

  9. Redis资料汇总(转)

    原文:Redis资料汇总专题 很多朋友反映,说NoSQLFan上的资料不少,但是要找到自己实用的太难,于是萌生做这样一个专题的想法.通过将不同NoSQL产品从入门到精通的各种资料进行汇总,希望能够让大 ...

随机推荐

  1. POJ 1663

    #include<iostream>//cheng da cai zi using namespace std; int main() { int time; cin>>tim ...

  2. Android 设置界面的圆角选项

    请先看一个图: 像这种界面的设计,其实是这样的:整体为一个LinearLayout,一个一个排下去,每一个点击项都是一个RelativeLayout(要为其设置clickable为true),分为左右 ...

  3. cojs 奈特 题解报告

    才知道knight念奈特,而不念科耐特 这个题显然是一个数据结构题目,我搬运的CF上的题 CF的题解好长超长哒,而且可以在线,但是并不能看懂 于是自己想了一个一种做法A掉了,唯一的缺陷就是做法有些繁琐 ...

  4. lintcode :旋转字符串

    题目: 旋转字符串 给定一个字符串和一个偏移量,根据偏移量旋转字符串(从左向右旋转) 样例 对于字符串 "abcdefg". offset=0 => "abcdef ...

  5. centos下hadoop2.6.0集群搭建详细过程

    一 .centos集群环境配置 1.创建一个namenode节点,5个datanode节点 主机名 IP namenodezsw 192.168.129.158 datanode1zsw 192.16 ...

  6. System.Windows.Forms.AxHost.InvalidActiveXStateException”类型的异常在 ESRI.ArcGIS.AxControls.dll 中发生,但未在用户代码中进行处理

    private void CopyAndOverwriteMap() { //IObjectCopy接口变量申明 IObjectCopy objectCopy = new ObjectCopyClas ...

  7. linux内核下载

    01最新版:https://www.kernel.org/ 02老旧版:https://www.kernel.org/pub/linux/kernel/v3.x/ ------------------ ...

  8. NDK(17)让ndk支持完整C++,exception,rtti,

    C++ Support The Android platform provides a very minimal C++ runtime support library (/system/lib/li ...

  9. Android权限安全(13)4.3前后root原理不同

    在JB MR2(4.3)之前 Apk内部可以通过Java的Runtime执行一个具有Root-setUID的可执行文件而 提升Effective UID来完成一些特权操作,典型的Root包中的su就是 ...

  10. HDU 4483 Lattice triangle(欧拉函数)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4483 题意:给出一个(n+1)*(n+1)的格子.在这个格子中存在多少个三角形? 思路:反着想,所有情 ...