三种特殊数据类型

geospatial 地理位置

geoadd:添加地理位置

规则:两级无法添加,我们一般会下载城市数据,直接通过java程序一次性导入。

参数 key 值(经度、纬度、名称)

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 chongqin 119.64 29.08 jinhua
(integer) 2
127.0.0.1:6379> geoadd china:city 120.15 30.28 hangzhou
(integer) 1
127.0.0.1:6379> geoadd china:city 108.94 34.26 xian
(integer) 1
127.0.0.1:6379> geoadd china:city 114.05 22.52 shengzhen
(integer) 1

 

geopos

127.0.0.1:6379> GEOPOS china:city beijing   获取指定位置的经度和纬度
1) 1) "116.39999896287918091"
   2) "39.90000009167092543"

 

geodist

返回两个位置之间的距离

127.0.0.1:6379> GEODIST china:city jinhua shanghai   金华和上海的直线距离单位米
"296906.9375"
127.0.0.1:6379> GEODIST china:city jinhua shanghai km    金华和上海的直线距离单位千米
"296.9069"

 

georadius 

以给定的经纬度为中心, 找出某一半径内的元素

所有的数据应该都录入china:city中,才会让结果更加精确
127.0.0.1:6379> GEORADIUS china:city 110 30 1000 km   以110 30这个经纬度为中心,寻找方圆1000km内的城市
1) "chongqin"
2) "xian"
3) "shengzhen"
4) "jinhua"
5) "hangzhou"
127.0.0.1:6379> GEORADIUS china:city 110 30 500 km    以110 30这个纬度为中心,寻找房源500km内的城市
1) "chongqin"
2) "xian"127.0.0.1:6379> GEORADIUS china:city 110 30 500 km withcoord    显示城市的经纬度
1) 1) "chongqin"
   2) 1) "106.49999767541885376"
      2) "29.52999957900659211"
2) 1) "xian"
   2) 1) "108.93999785184860229"
      2) "34.25999964418929977"127.0.0.1:6379> GEORADIUS china:city 110 30 500 km withcoord withdist count 1  筛选出指定的结果,显示距离和经纬度
1) 1) "chongqin"
   2) "341.9374"
   3) 1) "106.49999767541885376"
      2) "29.52999957900659211"
127.0.0.1:6379> GEORADIUS china:city 110 30 500 km withcoord withdist count 2
1) 1) "chongqin"
   2) "341.9374"
   3) 1) "106.49999767541885376"
      2) "29.52999957900659211"
2) 1) "xian"
   2) "484.2186"
   3) 1) "108.93999785184860229"
      2) "34.25999964418929977"

 

 

georadiusbymember

找出指定位置元素周围的其他元素
127.0
.0.1:6379> GEORADIUSBYMEMBER china:city shanghai 400 km 1) "jinhua" 2) "hangzhou" 3) "shanghai"

 

geohash

将二维的经纬度转换为一维的字符串
127.0
.0.1:6379> geohash china:city beijing hangzhou 1) "wx4fbxxfke0" 2) "wtmkq069cc0"

 

geo底层的实现原理其实就是Zset!我们可以使用Zset命令来操作geo!

127.0.0.1:6379> zrange china:city 0 -1    查看地图中全部的元素
1) "chongqin"
2) "xian"
3) "shengzhen"
4) "jinhua"
5) "hangzhou"
6) "shanghai"
7) "beijing"
127.0.0.1:6379> zrem china:city beijing     移除指定的元素
(integer) 1
127.0.0.1:6379> zrange china:city 0 -1
1) "chongqin"
2) "xian"
3) "shengzhen"
4) "jinhua"
5) "hangzhou"
6) "shanghai"

 

 

Hyperloglog数据结构

是用来做基数统计的算法!

优点:占用的内存是固定的,2^64不同的元素的技术,只需要废12KB内存!

网页的UV(一个人访问一个网站多次,但还是算作一个人!)

测试使用

127.0.0.1:6379> pfadd key a b c d e f g h i           创建第一组元素 key
(integer) 1
127.0.0.1:6379> pfcount key          统计key中元素基数数量
(integer) 9
127.0.0.1:6379> pfadd key2  i j k m n l o p q r s t       创建第二组元素 key2
(integer) 1
127.0.0.1:6379> pfcount key2  
(integer) 12
127.0.0.1:6379> 
127.0.0.1:6379> pfmerge mykey key key2    合并两组key key2 到mykey中
OK
127.0.0.1:6379> pfcount mykey     查看合并后的数量
(integer) 19

如果允许容错,那么一定可以使用Hyperloglog!

如果不允许容错,就使用set或者自己的数据类型即可!

 

Bitmap

位存储

统计用户信息,活跃,不活跃!登录、未登录!打卡,365打卡!

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 1
(integer) 0
127.0.0.1:6379> setbit sign 3 0
(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  
(integer) 0
127.0.0.1:6379> getbit sign 3   获取周四的打卡记录
(integer) 0 
127.0.0.1:6379> getbit sign 6   获取周日的打卡记录
(integer) 1
127.0.0.1:6379> BITCOUNT sign   获取本周的打卡记录
(integer) 4
127.0.0.1:6379> 

 

posted @ 2022-06-21 13:52  不想当将军的好士兵  阅读(79)  评论(0)    收藏  举报