目录
Bitmap(针对位操作字符串)
简介
操作:
HyperLogLog(针对基数)
简介
指令操作
Geospatial(针对地理经纬度)
简介
指令操作
现代计算机用二进制(位)作为信息的基础单位,1 个字节等于8位,例如"abc"字符串是由3个字节组成,但实际在计算机存储时将其用二进制表示,"abc" 分别对应的ASCII码分别是97、98、 99 ,对应的二进制分别是01100001、01100010和01100011 ,如下图
合理地使用操作位能够有效地提高内存使用率和开发效率。java中位与操作是最快的,在Redis中同样道理,(实际上是字符串)Redis提供了Bitmaps这个“数据类型”可以实现对位的操作: 。
( 1 ) Bitmaps本身不是一 种数据类型,实际上它就是字符串( key-value ),但是它可以对字符串的位进行操作。。
(2) Bitmaps单独提供了一套命令,所以在Redis中使用Bitmaps和使用字符串的方法不太相同。可以把 Bitmaps想象成一个以位为单位的数组 ,数组的每个元只能存储0和1,数组的下标在Bitmaps中叫做偏移量。
setbit
但是如果偏移量过大,会造成空间的浪费,更重要是如果是在初始化阶段偏移量过大,这个初始化执行会非常慢,还会造成阻塞。
getbit
bitcount
比如 0 1就是统计0 到 15的索引 ,1字节8位
bittop and (or/not/xor)
bitop是一个复合操作,它可以做多个Bitmaps的and(交集)、or(集)、not(非)、xor(异或)操作并将结果保存在destkey中。当数据量大的时候适合使用,数据量小的时候可能还不如 set节省空间
HyperLogLog会根据输入的元素来计算基数,而不会储存元素本身,所以HyperLogLog不会像集合那样返回,输入的各个元素。
基数就是比如说元素集{1 ,2 ,2 ,3 ,4 ,4 , 4} 其基数为 1 2 3 4,有4个基数。
pfadd
将所有元素添加到指定HyperLogLog数据结构中。如果执行命令后HLL估计的近似基数发生变化,则返回1,否则返回0。。
pfcount
pfmerge
Redis 3.2中增加了对GEO类型的支持。GEO , Geographic ,地理信息的缩写。该类型,就是元素的2维坐标,在地图上就是经纬度。redis基于该类型,提供了经纬度设置,查询,范围查询,距离查询,经纬度Hash等常见操作。
1、geoadd
两极无法直接添加,一般会下载城市数据,直接通过Java程序-次性导入。
有效的经度从-180 度到180 度。有效的纬度从-85.05112878 度到85.05112878度。当坐标位置超出指定范围时,该命令将会返回一个错误。已经添加的数据,是无法再次往里面添加的。
2、geopos
3、geodist
4、georadius