redis的Bitmap、HyperLogLog、Geospatial

目录

Bitmap(针对位操作字符串)

简介

操作:

HyperLogLog(针对基数)

简介

指令操作

Geospatial(针对地理经纬度)

简介

指令操作


Bitmap(针对位操作字符串)

简介

现代计算机用二进制(位)作为信息的基础单位,1 个字节等于8位,例如"abc"字符串是由3个字节组成,但实际在计算机存储时将其用二进制表示,"abc" 分别对应的ASCII码分别是97、98、 99 ,对应的二进制分别是01100001、01100010和01100011 ,如下图
redis的Bitmap、HyperLogLog、Geospatial_第1张图片

 合理地使用操作位能够有效地提高内存使用率和开发效率。java中位与操作是最快的,在Redis中同样道理,(实际上是字符串)Redis提供了Bitmaps这个“数据类型”可以实现对位的操作: 。
( 1 ) Bitmaps本身不是一 种数据类型,实际上它就是字符串( key-value ),但是它可以对字符串的位进行操作。。
(2) Bitmaps单独提供了一套命令,所以在Redis中使用Bitmaps和使用字符串的方法不太相同。可以把 Bitmaps想象成一个以位为单位的数组 ,数组的每个元只能存储0和1,数组的下标在Bitmaps中叫做偏移量。

 操作:

setbit 设置对应KEY值的偏移量的值

redis的Bitmap、HyperLogLog、Geospatial_第2张图片

 但是如果偏移量过大,会造成空间的浪费,更重要是如果是在初始化阶段偏移量过大,这个初始化执行会非常慢,还会造成阻塞。

getbit 获取对应KEY值的偏移量的值

redis的Bitmap、HyperLogLog、Geospatial_第3张图片

bitcount [start][end] 不设值start和end默认统计所有,统计指定第star字节t到end字节内值为1的索引的数量,

比如 0 1就是统计0 到 15的索引 ,1字节8位

redis的Bitmap、HyperLogLog、Geospatial_第4张图片

 bittop and (or/not/xor) [key...]

bitop是一个复合操作,它可以做多个Bitmaps的and(交集)、or(集)、not(非)、xor(异或)操作并将结果保存在destkey中。当数据量大的时候适合使用,数据量小的时候可能还不如 set节省空间

HyperLogLog(针对基数)

简介

HyperLogLog会根据输入的元素来计算基数,而不会储存元素本身,所以HyperLogLog不会像集合那样返回,输入的各个元素。

基数就是比如说元素集{1 ,2 ,2 ,3 ,4 ,4 , 4} 其基数为 1 2 3 4,有4个基数。

指令操作

pfadd [element ...] 添加指定元素到 HyperLogLog中

 将所有元素添加到指定HyperLogLog数据结构中。如果执行命令后HLL估计的近似基数发生变化,则返回1,否则返回0。。

pfcount [key ..]计算HLL的近似基数,可以计算多个HLL ,比如用HLL存储每天的UV ,计算一周的UV可以使用7天的UV合并计算即可
 

 pfmerge [sourcekey ..]将一个或多 个HLL合并后的结果存储在另一个HLL中,比如每月活跃用户可以使用每天的活跃用户来给并计算可得

redis的Bitmap、HyperLogLog、Geospatial_第5张图片

Geospatial(针对地理经纬度)

简介

Redis 3.2中增加了对GEO类型的支持。GEO , Geographic ,地理信息的缩写。该类型,就是元素的2维坐标,在地图上就是经纬度。redis基于该类型,提供了经纬度设置,查询,范围查询,距离查询,经纬度Hash等常见操作。

指令操作

1、geoadd < longitude> [longitude latitude member..]添加地理位置(经度,纬度,名称)。

两极无法直接添加,一般会下载城市数据,直接通过Java程序-次性导入。 
有效的经度从-180 度到180 度。有效的纬度从-85.05112878 度到85.05112878度。当坐标位置超出指定范围时,该命令将会返回一个错误。已经添加的数据,是无法再次往里面添加的。

2、geopos 获取制定城市的坐标

3、geodist [m]|km|ft|mi ]获取两个位置 之间的直线距离,不指定单位参数,默认用米 

 4、georadius < longitude> radius m|km|ft|mi 以给定的经纬度为中心 ,找出某一半径内的元素。

你可能感兴趣的:(面试,redis)