一、Bitmaps
Bitmaps本身不是一种数据类型,实际上它是字符串(key-value),但是它可以对字符串的位进行操作
可以把Redis想象成一个以位为单位的数组,数组每个单元只能存储0和1,数组的下标在Bitmaps中叫做偏移量
* setbit key offset value 设置Bitmaps中某个偏移量的值(0或1), offset偏移量从0开始
实例:每个独立用户是否访问过网站存放在Bitmaps中,将访问的用户记作1,没有为0,用偏移量作为用户id
Bitmaps 0 1 0 0 0 0 0 0 1 1 1
偏移量(用户id) 0 1 2 3 4 5 6 7 8 9 10
注:很多应用的用户id以一个指定数字如1000开头,直接将用户id与偏移量对应会造成一定浪费,可以将用户id-指定数字。
在第一次初始化Redis时,如果偏移量非常大,那么整个初始化过程会比较慢,造成Redis堵塞
* getbit key offset 获取Bitmaps中某个偏移量的值
* bitcount key [start end] 统计【起始 结束】字节比特值为1的数量
* redis的setbit设置或清除的是bit位置,而bitcount计算的是byte位置
* bitop and(or/not/xor) destkey key…… bitop是一个复合操作,可以做多个bitmap的and交集、or并集、not非、xor异或操作并将结果保存在destkey中。
Bitmaps和set对比:Bitmaps比较节省空间。但是若活跃用户量实际很少,Bitmaps就不太合适,因为大部分位都是0。
二、HyperLogLog
求集合中不重复元素个数的问题称为基数问题。Redis HyperLogLog是用来做基数统计的算法,优点是在输入元素的数量或者体积非常非常大时,计算基数所需的空间总是固定的,并且是很小的。
* pfadd key element 【element……】添加指定元素到HyperLogLog中 成功返回1,否则返回0
* pfcount key [key……] 计算HLL的近似基数,可以计算多个HLL,比如用HLL存储每天的UV,计算一周的UV可以使用7天的uv合并计算
* pfmerge destkey sourcekey [sourcekey……] 将一个或多个HLL并存后的结果存储在另一个HLL中,比如每月活跃用户可以使用每天的活跃用户来合并计算即可
三、Geospatial
* geoadd key longitude latitude memeber [longtiude latitude member], 添加地理位置(经度、纬度、名称)
* geopos key member[memeber……] 获得指定对象地区的坐标值。
* geodist key member1 member2 …… [m| km | ft | mi] 获取两个位置之间的直线距离
* georadius key longitude latitude radius m|km|ft|mi 以给定的经纬度为中心,找出一半径内的元素
标签:数据类型,Redis,用户,偏移量,Bitmaps,HLL,key From: https://www.cnblogs.com/fxzm/p/17452117.html