redis bitmaps,geospatial,hyperloglogs基本命令

3 篇文章 0 订阅


geospatial 主要是对地理位置进行操作

geospatial 的基本命令

## 添加数据
127.0.0.1:6379> GEOADD china::city 116.39 39.91 beijing
(integer) 1
127.0.0.1:6379> GEOADD china::city 112.98 28.25 changsha
(integer) 1
127.0.0.1:6379> GEOADD china::city 121.48 31.40 shanghai
(integer) 1
## 计算两个位置之间的距离 可以计算称为km m mi 表示单位为英里 ft 表示单位为英尺。。
127.0.0.1:6379> GEODIST china::city beijing shanghai
"1051905.1484"
127.0.0.1:6379> GEODIST china::city beijing shanghai km
"1051.9051"
## 给定经度,纬度 计算方圆多少公里的地点
127.0.0.1:6379> GEORADIUS china::city 116 39 2000 km
1) "changsha"
2) "shanghai"
3) "beijing"
##  给定经度,纬度 计算方圆多少公里的地点 并计算出他们与给出的经度纬度 相差的距离
127.0.0.1:6379> GEORADIUS china::city 116 39 2000 km withdist
1) 1) "changsha"
   2) "1227.7412"
2) 1) "shanghai"
   2) "980.6453"
3) 1) "beijing"
   2) "106.6133"
127.0.0.1:6379> GEORADIUS china::city 116 39 2000 m withdist
(empty array)
##  给定经度,纬度 计算方圆多少公里的地点,并带出他们的经度 纬度
127.0.0.1:6379> GEORADIUS china::city 116 39 2000 km withcoord
1) 1) "changsha"
   2) 1) "112.9800000786781311"
      2) "28.25000087963665152"
2) 1) "shanghai"
   2) 1) "121.48000091314315796"
      2) "31.40000025319353938"
3) 1) "beijing"
   2) 1) "116.38999968767166138"
      2) "39.90999956664450821"
      ## 获取指定的member的经纬度
      127.0.0.1:6379> GEOPOS china::city shanghai
1) 1) "121.48000091314315796"
   2) "31.40000025319353938"
## 以给出的member 为中心 查看方圆多少公里的坐标点(会包括自己)   
127.0.0.1:6379> GEORADIUSBYMEMBER china::city shanghai 2000 km 
1) "changsha"
2) "shanghai"
3) "beijing"
## redis底层实现是sorted set  所以zset的命令也可行
127.0.0.1:6379> zrange china::city 0 -1
1) "changsha"
2) "shanghai"
3) "beijing"
127.0.0.1:6379> zrange china::city 0 -1 withscores
1) "changsha"
2) "4050902071104876"
3) "shanghai"
4) "4054807767553238"
5) "beijing"
6) "4069885541975777"

hyperloglogs的基本命令

hyperloglogs 是基于概率算法HLL去实现的,并非是java独有的,到时候我会单独就这点开个帖子进行讲解 并且贴出来,这个概率算法的准确率。近似计算uv的算法,每一千万错误率0.5%. hyperlogLogs 是基于基数去进行一个计算。就是看不重复的数有多少

## 进行添加
127.0.0.1:6379> pfadd key 1 2 3 4 5
(integer) 1
## 统计数量
127.0.0.1:6379> pfcount key
(integer) 5
127.0.0.1:6379> pfadd key1 4 5 6
(integer) 1
127.0.0.1:6379> pfcount key1
(integer) 3
127.0.0.1:6379> pfcount key key1
(integer) 6
## destkey 就目标key 就是把数据merge到这个key里面来
127.0.0.1:6379> pfmerge destkey1 key key1
OK
127.0.0.1:6379> scan 0
1) "0"
2) 1) "destkey1"
   2) "key1"
   3) "key"
127.0.0.1:6379> pfcount destkey1
(integer) 6                                                                                                                   

bitMaps的基本命令

bitmap的value只能是0 和 1

## bitmap进行塞值
127.0.0.1:6379> setbit key 1 1
(integer) 0
## 获取bitmap的offset对应的值
127.0.0.1:6379> getbit key 1
(integer) 1
127.0.0.1:6379> setbit key 2 1
(integer) 0
127.0.0.1:6379> getbit key 2
(integer) 1
127.0.0.1:6379> setbit key 3 1
(integer) 0
127.0.0.1:6379> setbit key 4 1
(integer) 0
127.0.0.1:6379> setbit key 5 1
(integer) 0
127.0.0.1:6379> setbit key 6 1
(integer) 0
127.0.0.1:6379> setbit key 7 1
(integer) 0
##
127.0.0.1:6379> BITCOUNT key
(integer) 7
127.0.0.1:6379> setbit key 8 1
(integer) 0
##根据start 和 end进行获取value为1的数量有多少
127.0.0.1:6379> BITCOUNT key 0 0
(integer) 7
127.0.0.1:6379> bitcount key 0 1
(integer) 8

bitmaps setbit 塞的值是bit,但是bitcount key [start][end] 这里的start 和 end 是根据byte等于统计的

具体塞在那个位的拿个位置 是根据offset去决定的,我上面是offset为1 所以塞在 01000000这个位置。
1 Byte = 8 bit
00000000
1.看上图当我第一次进行setbit的时候byte上面的位如下

  • 01000000

2.当我进行setbit的时候byte上面的位如下

  • 01100000
    3.同理,一直持续到我第八次进行setbit的时候byte位如下面所示
  • 01111111 10000000
    4.故 127.0.0.1:6379> BITCOUNT key 0 0
    (integer) 7
    所以我获取第一个字节的时候 数量只有7
    当我获取 第一 和 第二个字节的时候数量为8
    127.0.0.1:6379> bitcount key 0 1
    (integer) 8

总结

到时候就每一种的特殊数据类型 我都会进行更加详细的讲解,到时候我会把连接贴出来
应用场景

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值