定位,附近的人,滴滴打车的距离
添加经度,纬度和名称
测试数据:http://www.jsons.cn/lngcode/
官方网站:https://www.redis.net.cn/order/3685.html
#添加地理位置
#规则:两级无法直接添加,通过java程序一次性导入!
#纬度,经度,城市
#(error) ERR invalid longitude,latitude pair 39.900000,116.400000 (经纬度超出了范围)
127.0.0.1:6379> geoadd china:city 116.40 39.90 beijing #添加
(integer) 1
127.0.0.1:6379> geoadd china:city 121.47 31.23 shanghai
(integer) 1
127.0.0.1:6379> geoadd china:city 106.50 29.53 chongqing 114.05 22.54 shenzhen
(integer) 2
127.0.0.1:6379> geoadd china:city 120.16 30.24 hangzhou 108.96 34.26 xian
(integer) 2
获取当前的定位:一定是一个坐标值
127.0.0.1:6379> geopos china:city beijing #获取指定城市的经度纬度
1) 1) "116.39999896287918091"
2) "39.90000009167092543"
127.0.0.1:6379> geopos china:city beijing chongqing
1) 1) "116.39999896287918091"
2) "39.90000009167092543"
2) 1) "106.49999767541885376"
2) "29.52999957900659211"
两个人之间的距离
127.0.0.1:6379> geodist china:city beijing shanghai km #查看上海到北京的直线距离
"1067.3788"
127.0.0.1:6379> geodist china:city beijing chongqing km #查看北京到重庆的直线距离
"1464.0708"
(获取所有附近的地址,定位)通过半径来查询。
所有数据应该都录入:结果才会精确。
127.0.0.1:6379> georadius china:city 110 30 1000 km#以110,30这个经纬度为中心,1000KM内的城
1) "chongqing"
2) "xian"
3) "shenzhen"
4) "hangzhou"
127.0.0.1:6379> georadius china:city 110 30 500 km
1) "chongqing"
2) "xian"
127.0.0.1:6379> georadius china:city 110 30 500 km withdist #显示离110,30的直线距离
1) 1) "chongqing"
2) "341.9374"
2) 1) "xian"
2) "483.8340"
127.0.0.1:6379> georadius china:city 110 30 500 km withcoord #显示出城市中的定位信息
1) 1) "chongqing"
2) 1) "106.49999767541885376"
2) "29.52999957900659211"
2) 1) "xian"
2) 1) "108.96000176668167114"
2) "34.25999964418929977"
127.0.0.1:6379> georadius china:city 110 30 500 km withdist withcoord count 1#筛选指定结果
1) 1) "chongqing"
2) "341.9374"
3) 1) "106.49999767541885376"
2) "29.52999957900659211"
127.0.0.1:6379> georadius china:city 110 30 500 km withdist withcoord count 2
1) 1) "chongqing"
2) "341.9374"
3) 1) "106.49999767541885376"
2) "29.52999957900659211"
2) 1) "xian"
2) "483.8340"
3) 1) "108.96000176668167114"
2) "34.25999964418929977"
127.0.0.1:6379> GEORADIUSBYMEMBER china:city beijing 1000 km
1) "beijing"
2) "xian"
127.0.0.1:6379> GEOHASH china:city beijing chongqing
1) "wx4fbxxfke0"
2) "wm5xzrybty0"
GEO底层的原理其实就是Zset,可以用Zset命令。
127.0.0.1:6379> ZRANGE china:city 0 -1
1) "chongqing"
2) "xian"
3) "shenzhen"
4) "hangzhou"
5) "shanghai"
6) "beijing"
127.0.0.1:6379> zrem china:city chongqing
(integer) 1
127.0.0.1:6379> ZRANGE china:city 0 -1
1) "xian"
2) "shenzhen"
3) "hangzhou"
4) "shanghai"
5) "beijing"
优点:占用的内存是固定,2^64不同的元素的技术,只需要12KB内存如果要从内存角度来比较的话
基数统计的算法
统计网站的UV (一个人访问一个网站很多次,算一个人)
传统的方式,set保存用户的id,然后就可以统计set中的元素数量作为标准判断
这个方式如果保存大量的用户ID, 目的是为了计数。
0.81%错误率!统计UV任务。
允许出错!!!
127.0.0.1:6379> PFadd set a b c d e f g h i j k #创建元素
(integer) 1
127.0.0.1:6379> PFCOUNT set #统计set的元素的基数数量
(integer) 11
127.0.0.1:6379> PFadd set2 i j k j f l a d #创建set2的元素
(integer) 1
127.0.0.1:6379> PFCOUNT set2
(integer) 7
127.0.0.1:6379> PFMERGE set3 set set2 #合并两组的元素 并集
OK
127.0.0.1:6379> PFCOUNT set3 #查看
(integer) 12
统计用户信息,两种状态的即可使用Bitmaps。
bitmaps为数据结构,都是操作二进制来进行记录,只有0和1两个状态
365天 =365bit 1字节=8bit 非常的方便!!
127.0.0.1:6379> setbit sign 0 1
(integer) 0
127.0.0.1:6379> setbit sign 1 0
(integer) 0
127.0.0.1:6379> setbit sign 2 0
(integer) 0
127.0.0.1:6379> setbit sign 3 1
(integer) 0
127.0.0.1:6379> setbit sign 4 1
(integer) 0
127.0.0.1:6379> setbit sign 5 0
(integer) 0
127.0.0.1:6379> setbit sign 6 1
查看某天是否有没有打卡!
127.0.0.1:6379> getbit sign 6
(integer) 1
127.0.0.1:6379> getbit sign 3
(integer) 1
127.0.0.1:6379> getbit sign 1
(integer) 0
统计,打卡的天数!
127.0.0.1:6379> bitcount sign #统计这周的打卡记录
(integer) 4