Redis新数据类型
BitMaps
- Redis提供了
Bitmaps
这个数据类型,可以实现对位的操作
(1)Bitmaps本身不是一种数据类型,实际上它就是字符串,但它可以对字符串的位进行操作
(2)可以把Bitmaps想象成一个以位为单位的数组,数组的每个单元只能存储0和1,数据的下标在Bitmaps中叫做偏移量
- 基本命令:
setbit <key> <offset> <value>
设置Bitmaps
中某个偏移量的值(0或1)getbit <key> <offset>
获取Bitmaps
中某个偏移量的值
bitcount <key> [start] [end]
统计字符串
被设置为1的个数
(1)一般情况下,给定的整个字符串都会被进行计数,通过指定额外的start
和end
参数,可以让计数只在特定的位上进行
(2)start
和end
参数的设置,都可以使用负数值,-1
表示最后以为,-2
表示倒数第二位
(3)start
和end
是指bit
组的字节
的下标数
bitop and(or/not/xor) <destkey> [key ...]
bitop
是一个复合操作,它可以做多个Bitmaps
的与
、或
、非
、异或
操作并将结果保存在destkey
中
HyperLogLog
- Redis的
HyperLoglog
是用来做基数统计的算法,优点是在输入元素的数量或体积非常大时,计算基数所需要的空间是固定的,且很小
- 基数问题:
基数问题
是指求集合中不重复元素个数- 解决基数问题的方法:
(1)数据存储在MySQL数据库时,可以利用distinct和count计算不重复个数
(2)使用Redis提供的hash
、set
、bitmaps
等数据结构来处理- 以上方案,结果精确,但会导致占用空间越来越大,实际场景下可能难以应用
HyperLogLog
是通过损失一定精度来减少内存的消耗- 在Redis中
HyperLogLog
只需要花费12KB
内存,就可以存储 2 64 2^{64} 264个不同的元素的基数
- 基本命令:
pfadd <key> <element> [element...]
添加指定元素到HyperLogLog
pfcount <key> [key...]
计算HyperLogLog
中的近似基数,可以计算多个HLLpfmerge destkey sourcekey [sourcekey...]
将一个或多个HLL合并后的结果保存到另一个HLL中
Geospatial
Geospatial(GEO)
是地理信息的缩写,该类型就是元素的2维坐标,即地图上的经纬度
- 基本命令:
geoadd <key> <longitude> <latitude> <member> [longitude latitude member...]
添加地理位置(经度、维度、名称)geopos <key> <member [member ...]>
获取指定地区的坐标值geodist <key> <member1> <member2> [m|km|ft|mi]
获取两个位置之间的直线距离georadius <key> <longitude> <latitude> radius m|km|ft|mi
以给定的经纬度为中心,找出某一半径内的元素