zoukankan      html  css  js  c++  java
  • redis 简单整理——CEO[十五]

    前文

    简单介绍一下CEO。

    正文

    Redis3.2版本提供了GEO(地理信息定位)功能,支持存储地理位置信 息用来实现诸如附近位置、摇一摇这类依赖于地理位置信息的功能,对于需 要实现这些功能的开发者来说是一大福音。

    longitude、latitude、member分别是该地理位置的经度、纬度、成员。

    1.增加地理位置信息

    geoadd key longitude latitude member [longitude latitude member ...]
    

    longitude、latitude、member分别是该地理位置的经度、纬度、成员.

    cities:locations是上面5个城市地理位置信息的集合,现向其添加北京 的地理位置信息:

    geoadd cities:locations 116.28 39.55 beijing

    返回结果代表添加成功的个数,如果cities:locations没有包含beijing,那么返回结果为1,如果已经存在则返回0.

    如果需要更新地理位置信息,仍然可以使用geoadd命令,虽然返回结果 为0。geoadd命令可以同时添加多个地理位置信息:

    geoadd cities:locations 117.12 39.08 tianjin 114.29 38.02 shijiazhuang 118.01 39.38 tangshan 115.29 38.51 baoding
    
    1. 获取地理位置信息
    geopos key member [member ...]
    

    例如:

     geopos cities:locations tianjin
    

    3.获取两个地理位置的距离

    geodist key member1 member2 [unit]

    其中unit代表返回结果的单位,包含以下四种: ·m(meters)代表米。 ·km(kilometers)代表公里。 ·mi(miles)代表英里。·ft(feet)代表尺。

    geodist cities:locations tianjin beijing km
    

    4.获取指定位置范围内的地理信息位置集合

    georadius key longitude latitude radiusm|km|ft|mi [withcoord] [withdist] [withhash] [COUNT count] [asc|desc] [store key] [storedist key] georadiusbymember key member radiusm|km|ft|mi [withcoord] [withdist] [withhash] [COUNT count] [asc|desc] [store key] [storedist key]

    georadius和georadiusbymember两个命令的作用是一样的,都是以一个地 理位置为中心算出指定半径内的其他地理信息位置,不同的是georadius命令 的中心位置给出了具体的经纬度,georadiusbymember只需给出成员即可。其 中radiusm|km|ft|mi是必需参数,指定了半径(带单位),这两个命令有很多 可选参数,如下所示:

    ·withcoord:返回结果中包含经纬度。
    
    ·withdist:返回结果中包含离中心节点位置的距离。
    
    ·withhash:返回结果中包含geohash,有关geohash后面介绍。
    
    ·COUNT count:指定返回结果的数量。
    
    ·asc|desc:返回结果按照离中心节点的距离做升序或者降序。
    
    ·store key:将返回结果的地理位置信息保存到指定键。
    
    ·storedist key:将返回结果离中心节点的距离保存到指定键。
    

    下面操作计算五座城市中,距离北京150公里以内的城市:

    georadiusbymember cities:locations beijing 150 km
    

    5.获取geohash

    geohash key member [member ...]
    

    Redis使用geohash[3]将二维经纬度转换为一维字符串,下面操作会返回 beijing的geohash值

    geohash cities:locations beijing
    

    geohash有如下特点:

    ·GEO的数据类型为zset,Redis将所有地理位置信息的geohash存放在zset 中。

    type cities:locations

    字符串越长,表示的位置更精确

    ·两个字符串越相似,它们之间的距离越近,Redis利用字符串前缀匹配 算法实现相关的命令。

    ·geohash编码和经纬度是可以相互转换的。 Redis正是使用有序集合并结合geohash的特性实现了GEO的若干命令。

    1. zrem key member

    GEO没有提供删除成员的命令,但是因为GEO的底层实现是zset,所以 可以借用zrem命令实现对地理位置信息的删除。

    总结

    1)慢查询中的两个重要参数slowlog-log-slower-than和slowlog-max- len。

    2)慢查询不包含命令网络传输和排队时间。

    3)有必要将慢查询定期存放。

    4)redis-cli一些重要的选项,例如--latency、–-bigkeys、-i和-r组合。

    5)redis-benchmark的使用方法和重要参数。

    6)Pipeline可以有效减少RTT次数,但每次Pipeline的命令数量不能无节 制。

    7)Redis可以使用Lua脚本创造出原子、高效、自定义命令组合。

    8)Redis执行Lua脚本有两种方法:eval和evalsha。

    9)Bitmaps可以用来做独立用户统计,有效节省内存。

    10)Bitmaps中setbit一个大的偏移量,由于申请大量内存会导致阻塞。

    11)HyperLogLog虽然在统计独立总量时存在一定的误差,但是节省的 内存量十分惊人。

    12)Redis的发布订阅机制相比许多专业的消息队列系统功能较弱,不 具备堆积和回溯消息的能力,但胜在足够简单。

    13)Redis3.2提供了GEO功能,用来实现基于地理位置信息的应用,但 底层实现是zset。

    下一大节,客户端的使用。

  • 相关阅读:
    git 文件回滚
    常用函数
    触发器
    UPDATE
    DELETE
    INSERT
    完整性与约束
    流程控制
    SET ANSI_NULL ON 和 SET QUOTED_IDENTIFIFR ON
    SELECT 与 SET给标量赋值
  • 原文地址:https://www.cnblogs.com/aoximin/p/15170363.html
Copyright © 2011-2022 走看看