Redis中的特殊类型

Geospatial

是用来存储地理位置的一个数据结构
Geo是在Redis3.2版本中推出的,这个功能可以推算地理位置信息,两地的距离,方圆几里的人
下面涉及到经度纬度的存储,可以用查询城市经度纬度来查询测试数据

  • 命令使用

geoadd 添加key以及对应的经度 纬度 名称

# 经度在前纬度在后
# 有效的经度从-180度到180度。
#	有效的纬度从-85.05112878度到85.05112878度。
# 当坐标位置超出上述指定范围时,该命令将会返回一个错误。
127.0.0.1:6379> geoadd china:city 116 39 beijing   	#向china:city key 中添加北京的经度纬度
(integer) 1
127.0.0.1:6379> geoadd china:city 121 31 shanghai
(integer) 1
127.0.0.1:6379> geoadd china:city 106.50 29.53 chongqi 114.05 22.52 shengzhen
(integer) 2
127.0.0.1:6379> geoadd china:city 120.16 30.24 hangzhou 108.96 34.26 xian
(integer) 2

getpos 显示key的经度纬度

127.0.0.1:6379> geopos china:city beijing    #显示北京的经度纬度,若没有则显示空
1) 1) "116.00000113248825073"
   2) "38.99999918434559731"
127.0.0.1:6379> geopos china:city guangzhou
1) (nil)

geodist 显示两地的距离 (将地球作为一个完美球体进行计算,误差在0.5%以内)
如果两个位置之间的其中一个不存在, 那么命令返回空值。
指定单位的参数 unit 必须是以下单位的其中一个。
m 表示单位为米。
km 表示单位为千米。
mi 表示单位为英里。
ft 表示单位为英尺。
如果用户没有显式地指定单位参数, 那么 GEODIST 默认使用米作为单位

127.0.0.1:6379> geodist china:city beijing shanghai km   #以千米为单位显示北京到上海的距离
"999.2077"

georadius 以给定的经纬度为中心, 返回键包含的位置元素当中, 与中心的距离不超过给定最大距离的所有位置元素
范围可以是 m km mi ft
WITHDIST: 在返回位置元素的同时, 将位置元素与中心之间的距离也一并返回。 距离的单位和用户给定的范围单位保持一致。
WITHCOORD: 将位置元素的经度和维度也一并返回。

127.0.0.1:6379> georadius china:city 110 30 1000 km   #找经度110纬度30方圆1000km以内的元素
1) "chongqi"
2) "xian"
3) "shengzhen"
4) "hangzhou"
127.0.0.1:6379> georadius china:city 110 30 1000 km withcoord   #显示元素的经度纬度
1) 1) "chongqi"
   2) 1) "106.49999767541885376"
      2) "29.52999957900659211"
2) 1) "xian"
   2) 1) "108.96000176668167114"
      2) "34.25999964418929977"
3) 1) "shengzhen"
   2) 1) "114.04999762773513794"
      2) "22.5200000879503861"
4) 1) "hangzhou"
   2) 1) "120.1600000262260437"
      2) "30.2400003229490224"
127.0.0.1:6379> georadius china:city 110 30 500 km withdist   #显示到110 30 的具体距离
1) 1) "chongqi"
   2) "341.9374"
2) 1) "xian"
   2) "483.8340"
127.0.0.1:6379> georadius china:city 110 30 500 km count 1		#筛选指定的结果
1) "chongqi"

georadiusbymember 找出位于指定元素周围的其他元素

127.0.0.1:6379> GEORADIUSBYMEMBER china:city beijing 1000 km 
1) "beijing"
2) "xian"
127.0.0.1:6379> GEORADIUSBYMEMBER china:city shanghai 400 km 
1) "hangzhou"
2) "shanghai" 

geohash 返回一个或多个位置元素的geohash表示
该命令返回一个11字符的字符串

#将经度纬度转换为一维字符串,如果两个字符串接近,那么距离越近,可以根据这个字符串去查找到对应位置
127.0.0.1:6379> geohash china:city beijing chongqi		
1) "wwfmzesx7y0"
2) "wm5xzrybty0"

Hyperloglog

统计基数

  • 什么是基数
    有集合A{1、2、3、4、5} 和集合B{2、2、3、3、4、5、6}
    基数用大白话讲就是一个集合中不重复的元素
    所以A的基数就是5,B的基数也是5(除去重复的2和3)
    在Redis统计基数中是有误差的
  • Redis中的Hyperloglog
    优点:占用内存是固定的,2^64次方个不同元素的基数,只需要12KB的内存
    可以用来做什么?
    存储网页的访问数(一个人访问一个网站多次,只算一次访问)
    传统的方式中是使用set来存储,由于set是无序无重复的,多次插入一个用户ID也存储的是一个值,但是当数据量很大的时候就会很麻烦,我们要做的是计数而不是存储ID
    那么就可以使用Hyperloglog,虽然有误差但是在网页的访问数中也可以忽略这些误差
  • 如何使用
127.0.0.1:6379> PFadd mykey a b c d e    #创建第一组元素mykey
(integer) 1
127.0.0.1:6379> PFCOUNT mykey   #统计mykey中的基数数量
(integer) 5
127.0.0.1:6379> PFADD mykey b c d e f   #继续向mykey中添加元素
(integer) 1
127.0.0.1:6379> PFCOUNT mykey     #统计mykey中的基数数量
(integer) 6
127.0.0.1:6379> PFADD mykey1 b c d e f g   #创建第二组元素mykey1
(integer) 1
127.0.0.1:6379> PFCOUNT mykey1      #统计mykey1中的基数数量
(integer) 6
127.0.0.1:6379> PFMERGE mykey2 mykey mykey1  #合并两组元素
OK
127.0.0.1:6379> PFCOUNT mykey2			#统计合并后的基数数量
(integer) 7

Bitmap

位存储
统计一个用户活跃、不活跃 登录、没登录 打卡、没打卡
位存储存储的就是01值,任何两个状态的事物都可以用01来存储

  • 如何使用
    这里使用其来存储一个人一周打卡的情况
127.0.0.1:6379> setbit sign 0 0   #key是sign  第一个0代表周一  第二个0代表周二
(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 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
(integer) 0
127.0.0.1:6379> GETBIT sign 1	#获取signkey星期一的签到状态
(integer) 0
127.0.0.1:6379> bitcount sign	#获取sign本周的签到天数
(integer) 4
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值