七天玩转Redis|Day3,Redis地理位置,基数统计,位图场景详解

.

1.Gaospatial地理位置

1.添加一个或多个地理位置的坐标

  • 经纬查询

城市经纬度查询-国内城市经度纬度在线查询工具

GeoAdd key longitude latitude member [longitude latitude member ...]

  • key为该地理位置的索引
  • longitude表示该位置的经度
  • latitude表示该位置的纬度
  • member表示地名
  • [longitude latitude member ...]表示可以重复添加,中间以空格分隔
127.0.0.1:6379> GEOADD china:city 114.08 22.54 shenzhen
(integer) 1
127.0.0.1:6379> GEOADD china:city 114.08 22.54 shenzhen
(integer) 1
127.0.0.1:6379> GEOADD china:city 116.10 39.90 beijing
(integer) 1
127.0.0.1:6379> GEOADD china:city 113.66 34.75 zhengzhou
(integer) 1
127.0.0.1:6379> GEOADD china:city 112.54 37.85 taiyuan
(integer) 1
127.0.0.1:6379> GEOADD china:city 113.28 23.12 guangzhou
(integer) 1
127.0.0.1:6379>  GEOADD china:city 120.15 30.28 hangzhou 118.76 32.04 nanjing
(integer) 2

2.查询一个或多个地理位置坐标

GeoPos key member [member...]

127.0.0.1:6379> GEOPOS china:city zhengzhou
1) 1) "113.65999907255172729"
   2) "34.74999926510690784"
127.0.0.1:6379> GEOPOS china:city beijing changsha
1) 1) "116.09999924898147583"
   2) "39.90000009167092543"
2) (nil)

3.查询两地之间距离

GeoDist key member1 member2 [unit] //unit 单位

127.0.0.1:6379> GEODIST china:city zhengzhou hangzhou
"785609.9719"
127.0.0.1:6379> GEODIST china:city zhengzhou hangzhou m
"785609.9719"
127.0.0.1:6379> GEODIST china:city shenzhen beijing km
"1940.2709"

4.以坐标为中心来范围搜索地理位置

//我们平常都会使用到附近的人功能,或者以自己为中心搜索附近,Redis中可以使用命令GEORADIUS来指定附近多少米以内的地理位置的查询。

GEORADIUS key longitude latitude radius m|km|ft|mi [WITHCOORD] [WITHDIST] [WITHHASH] [COUNT count] [ASC|DESC]

  • radius表示要查询的半径
  • m|km|ft|mi表示单位
  • [WITHCOORD]可选,表示是否输出经纬度
  • [WITHDIST]可选,表示是否输出距离
  • [WITHHASH]可选,表示是否输出哈希值
  • [COUNT count]可选,表示输出几个数据
  • [ASC|DESC]可选,表示按照距离升序还是降序排列,ASC升序,DESC降序
127.0.0.1:6379> GEORADIUS china:city 114.05 22.52 1000 km
1) "shenzhen"
2) "guangzhou"

127.0.0.1:6379> GEORADIUS china:city 114.05 22.52 1500 km WITHCOORD
1) 1) "shenzhen"
   2) 1) "114.08000081777572632"
      2) "22.53999903789756587"
2) 1) "guangzhou"
   2) 1) "113.27999979257583618"
      2) "23.1199990030198208"
3) 1) "hangzhou"
   2) 1) "120.15000075101852417"
      2) "30.2800007575645509"
4) 1) "zhengzhou"
   2) 1) "113.65999907255172729"
      2) "34.74999926510690784"
5) 1) "nanjing"
   2) 1) "118.75999957323074341"
      2) "32.03999960287850968"

127.0.0.1:6379> GEORADIUS china:city 114.05 22.52 1500 km WITHDIST
1) 1) "shenzhen"
   2) "3.8011"
2) 1) "guangzhou"
   2) "103.3692"
3) 1) "hangzhou"
   2) "1055.1042"
4) 1) "zhengzhou"
   2) "1360.8264"
5) 1) "nanjing"
   2) "1156.3230"

127.0.0.1:6379> GEORADIUS china:city 114.05 22.52 1500 km COUNT 2
1) "shenzhen"
2) "guangzhou"

5.以位置为中心类范围搜索地理位置

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

  • radius表示要查询的半径
  • m|km|ft|mi表示单位
  • [WITHCOORD]可选,表示是否输出经纬度
  • [WITHDIST]可选,表示是否输出距离
  • [WITHHASH]可选,表示是否输出哈希值
  • [COUNT count]可选,表示输出几个数据
  • [ASC|DESC]可选,表示按照距离升序还是降序排列,ASC升序,DESC降序
127.0.0.1:6379> GEORADIUSBYMEMBER china:city taiyuan 800 km
1) "zhengzhou"
2) "taiyuan"
3) "beijing"

2)Hyperloglog基数统计

基数计算(cardinality counting)指的是统计一批数据中的抛去重复元素后数据的个数

1)创建一组数据

PFADD key element [element ...]

  • element为数据集中的数据,可以输入多个,中间以空格分隔
127.0.0.1:6379> PFADD mynum1 a b c d e f g
(integer) 1
127.0.0.1:6379> PFADD mynum2 f g h i j k l m
(integer) 1
127.0.0.1:6379> PFADD mynum3 n o p q n
(integer) 1

2)统计数据集是基数数量

PFCOUNT key [key ...]

127.0.0.1:6379> PFCOUNT mynum3
(integer) 4
127.0.0.1:6379> PFCOUNT mynum1
(integer) 7

3)合并数据集

PFMERGE destkey sourcekey [sourcekey ...]

  • destkey为要合并到的数据集的名称
  • sourcekey为要合并的数据集的索引,可以存在多个,中间以空格分隔
127.0.0.1:6379> PFMERGE mynum4 mynum1 mynum2
OK
127.0.0.1:6379> PFCOUNT mynum4
(integer) 13

3)Bitmap

在Redis中的Bitmap位图是通过操作二进制位来实现的,在其中存储的数据要么是0,要么是1,比如下面这个{0,1,1,0,0,0,0}。而且位图中的每一个数据都是有唯一的一个下标对应的,和我们学习的数组类似。

1.输入位图数据集

SETBIT key offset value

  • offset为要输入的数据的下标
  • value为要输入的数据,0或1
127.0.0.1:6379> SETBIT mybit1 0 0    #下标为0表示第一天
(integer) 0
127.0.0.1:6379> SETBIT mybit1 1 1    #下标为1表示第二天
(integer) 0
127.0.0.1:6379> SETBIT mybit1 2 0    #下标为2表示第三天
(integer) 0
127.0.0.1:6379> SETBIT mybit1 3 0
(integer) 0
127.0.0.1:6379> SETBIT mybit1 4 1
(integer) 0
127.0.0.1:6379> SETBIT mybit1 5 1
(integer) 0
127.0.0.1:6379> SETBIT mybit1 6 0
(integer) 0

2.统计“1”的个数

BITCOUNT key [start end]

  • [start end]表示开始和结束的下标,默认不写就是统计数据集中所有数据
127.0.0.1:6379> BITCOUNT mybit1
(integer) 3

4)Conclude

  • 学到了一些地图的操作,受益匪浅
  • 感觉对于Redis的功能有更多的了解,觉得学到了些不一样的东西,真正不会的的东西
  • 期待明天
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值