reids高级数据类型是基于五种基本数据类型的,是为了针对某些特定的业务而衍生出来的数据类型。
一、Bitmaps
bitmaps事实上并不是一种新的数据类型,而是基于字符串位操作的集合,由于字符串是二进制安全的,并且最长可支持512M,所以它们可以用来存储2的32次方(512 * 1024 * 1024 * 8 )不同位的数据。
bitmaps的位操作分成两组:1.固定时间的单个位操作,比如把字符串的某个位设置为1或者0,或者获取某个位上的值 2.对于一组位的操作,对给定的比特范围内,统计设定值为1的数目。
bitmaps最大的优势是在存储数据时可以极大的节省空间,比如在一个项目中采用自增长的id来标识用户,就可以仅用512M的内存来记录4亿用户的信息(比如用户是否希望收到新的通知,用1和0标识)
如:11100001 偏移量为0-7,顺序为从右到左
getbit key offset 获取指定key对应偏移量上的bit值
setbit key offset value 设置指定key对应偏移量上的bit值,value只能是1或0
bitop op destKey key1 [key2...] 对指定key按位进行交、并、非、异或操作,并将结果保存到destKey中
op:and 交 or 并 not 非 xor 异或
bitcount key [start end] 统计指定key中1的数量
适用场景:信息状态统计
二、HyperLoglog
HyperLogLog 是用来做基数(去重后元素个数)统计的,运用了LogLog的算法 。
HyperLogLog 用于进行基数统计,不是集合,不保存数据,只记录数量而不是具体数据 。
核心是基数估算算法,最终数值存在一定误差 。误差范围:基数估计的结果是一个带有 0.81% 标准错误的近似值
耗空间极小,每个hyperloglog key占用了12K的内存用于标记基数
pfadd命令不是一次性分配12K内存使用,会随着基数的增加内存逐渐增大
Pfmerge命令合并后占用的存储空间为12K,无论合并之前数据量多少
pfadd key element 添加数据
pfcount key 统计数据
pfmerge destkey sourcekey 合并数据
适用场景:独立IP统计
三、GEO
GEO为地理位置的支持。
georadius key longitude latitude radius m|km|ft|mi [withcoord] [withdist] [withhash] [count count] 添加坐标点
georadiusbymember key member radius m|km|ft|mi [withcoord] [withdist] [withhash] [count count] 获取坐标点
geohash key member [member ...] 计算经纬度
适用场景:地理位置信息处理