Redis中的三种特殊数据类型,geospatial类型,Hyperloglog类型和Bitmaps类型

文章目录

  • Redis中的三种特殊数据类型,geospatial类型,Hyperloglog类型和Bitmaps类型
    • geospatial类型
      • 查询城市经纬度的网址
      • geoadd 命令
      • geopos命令
      • geodist命令
      • georadius命令
      • georadiusbymember命令
      • geohash命令
      • geospatial类型的底层封装
    • Hyperloglog类型
      • Hyperloglog的使用场景
      • Hyperloglog类型的常用命令
        • PFadd命令和PFcount命令和PFmerge命令
    • Bitmaps类型
      • Bitmaps的应用场景
      • Bitmaps类型的常用命令
        • setbit命令和getbit命令和bitcount命令

Redis中的三种特殊数据类型,geospatial类型,Hyperloglog类型和Bitmaps类型

geospatial类型

查询城市经纬度的网址

geospatial这个单词的意思是地理空间。geospatial类型可以用来搜索附近的人,也可以用来判断两地之间的直线距离等;

这个网站可以查询一些城市的经纬度数据:https://jingweidu.bmcx.com/,如下图:

Redis中的三种特殊数据类型,geospatial类型,Hyperloglog类型和Bitmaps类型_第1张图片

geoadd 命令

getadd添加地理位置的时候有一个规则:两级是无法直接添加的,我们一般会下载城市数据,直接通过java程序一次性导入!

有效的经度从-180度到180度,有效的纬度从-85.05112878度到85.05112878度。

geoadd命令可以添加地理位置的经纬度,命令是:

geoadd geospatial类型的键的名字 某个城市的经度 某个城市的纬度 这个城市的名字 [可一次性添加多个城市的经纬度],此命令的使用如下图:

Redis中的三种特殊数据类型,geospatial类型,Hyperloglog类型和Bitmaps类型_第2张图片

geopos命令

geopos geospatial类型对应的键的名字 geospatial类型所对应的键里面的成员 [可以一次性写多个成员],这个命令的的作用是可以返回指定成员的经纬度坐标,命令使用如下图:

Redis中的三种特殊数据类型,geospatial类型,Hyperloglog类型和Bitmaps类型_第3张图片

geodist命令

geodist geospatial类型对应的键的名字 里面的成员1 里面的成员2,这条命令可以输出两个城市之间的直线距离,命令的使用如下图:

在这里插入图片描述

georadius命令

georadius geospatial类型对应的键的名字 经纬度表示的中心点 半径距离 距离单位 [withdist] [withcoord] [count 每次限定个数],此命令可以搜索附近的城市,搜索到城市的前提是这个城市必须要存在于china:city这个集合中,其中有几个可选项,这里解释一下:

[count 每次限定个数]这个可选项可以限定每次输出的附近的城市的个数,

[withdist]这个可选项可以输出中心点离附近的城市的距离,

[withcoord]这个可选项可以输出附近的城市的经纬度,

命令的使用如下图:

在这里插入图片描述

查询附近的城市的时候,如果一次查询全部那就太多了,你可以限定查询的个数,如果限定1个,那么每次就只能查询一个,如果限定2个,那么每次就只能查询两个,如下图:

在这里插入图片描述

还可以加上附近的城市的经纬度和中心点到附近的城市的距离,如下图:

在这里插入图片描述

georadiusbymember命令

georadiusbymember geospatial类型对应的键的名字 集合里面的成员 距离 单位 [withdist] [withcoord] [count 限定个数],此命令和georadius这个命令的使用效果相同,只不过是把中心点的经纬度坐标换成了集合里面的成员,如下图:

Redis中的三种特殊数据类型,geospatial类型,Hyperloglog类型和Bitmaps类型_第4张图片

geohash命令

geohash geospatial类型对应的键的名字 集合里面的成员1 [成员2…],此命令可以将城市二维的经纬度转换成是一维的11位的hash字符串,此命令的使用如下图:

在这里插入图片描述

geospatial类型的底层封装

geospatial类型是基于ZSet有序集合封装的,因此我们可以对geospatial类型使用ZSet有序集合的命令,如下图:

Redis中的三种特殊数据类型,geospatial类型,Hyperloglog类型和Bitmaps类型_第5张图片

Hyperloglog类型

Hyperloglog的使用场景

什么是基数?

基数就是集合中不重复的元素的个数,比如A={“hhh”,“hhh”,“jjj”},B={“hhh”,“fff”,“qqq”},其中A集合的基数就是2,B集合的基数就是3。

Redis中的Hyperloglog类型是用来做基数统计的算法。

应用场景:网页的UV(一个人访问一个网站多次,但是还是算作一个人)。

传统的方式是用set保存用户的id,然后就可以统计set中的元素数量作为标准判断!这个方式如果保存大量的用户id就会比较麻烦!我们的目的是为了计数而不是为了保存用户id,所以我们可以用Hyperloglog类型来计算。

Hyperloglog类型的优点:占用的内存是固定的,2^64不同的元素只需要废掉12KB的内存。如果要从内存角度比较的话Hyperloglog就是首选。但是用Hyperloglog计算基数大概有0.81%的错误率!但是这个错误率在统计UV的时候可以忽略不计!如果不允许容错,那么统计计数的时候要用Set集合不能用Hyperloglog类型。

Hyperloglog类型的常用命令

PFadd命令和PFcount命令和PFmerge命令

PFadd Hyperloglog类型的名字 需要统计的元素:此命令可以把需要统计的元素加入到Hyperloglog类型对应的集合中

PFcount Hyperloglog类型的名字:此命令可以统计Hyperloglog类型所对应的集合中的元素的基数

PFmerge Hyperloglog类型的名字 Hyperloglog类型的名字2 Hyperloglog类型的名字3 [4 5…]:此命令可以把多个Hyperloglog类型中的元素合并到一个Hyperloglog类型中,注意合并之后,提供元素的Hyperloglog类型并不发生改变

这三个命令的使用如下图:

Redis中的三种特殊数据类型,geospatial类型,Hyperloglog类型和Bitmaps类型_第6张图片

Bitmaps类型

Bitmaps的应用场景

bitmap,位图,即是使用bit。 redis字符串是一个字节序列。

1 Byte = 8 bit

img

位存储

统计用户信息,活跃的和不活跃的,登录的和未登录的,打卡和未打卡的。像这样只有两个状态的,都可以使用Bitmaps类型。

Bitmaps位图,也是一种数据结构,都是操作二进制位来进行记录,就只有0和1两个状态!

365天=365bit 1字节=8bit

统计操作,统计打卡的天数。

如下图:

Redis中的三种特殊数据类型,geospatial类型,Hyperloglog类型和Bitmaps类型_第7张图片

Bitmaps类型的常用命令

setbit命令和getbit命令和bitcount命令

setbit Bitmaps类型的名字 offset偏移量 编码值即0或者1:此命令用来设置某一天对应的offset偏移量所对应的编码值,像比如星期一打卡了那么就把第0个偏移量的编码设置成1,星期二没打卡那么就把第1个偏移量的编码设置成0

getbit Bitmaps类型的名字 offset偏移量:此命令可以得到某个偏移量的编码值,像得到星期一的打卡情况

bitcount Bitmaps类型的名字:此命令可以获取Bitmaps类型对应的位图当中偏移量是1的个数

下面通过一周内的打卡情况来解释上面三个命令的使用情况,如下图:

Redis中的三种特殊数据类型,geospatial类型,Hyperloglog类型和Bitmaps类型_第8张图片

你可能感兴趣的:(Redis)