Redis拥有三大高级数据类型
- bitmaps
- HyperLogLog
- GEO
Bitmaps
以位(bit)来保存数据,用于存储简单的状态数据
用法相当于一个Boolean类型的List集合
注意:
如果我们设置一个值的下标非常大,而下标之前的所有数据将会用0来补充
操作
// 在指定位置上获取值
getbit key offset
// 在指定位置上设置值
setbit key offset value
// 对指定key按位进行操作,并将结果保存到destkey中
bitop op destkey key1 [key2...]
// 统计指定key中1的数量
bitcount key [start end]
op操作
- and: 交集
- or:并集
- not:非
- xor:异或
HyperLogLog
运用了LogLog算法
用来做基数统计(数据集去重后的元素的个数)
操作
// 添加数据
pfadd key element [element...]
// 统计数据
pfcount key [key...]
// 合并数据
pfmerge destkey sourcekey [sourcekey...]
HyperLogLog的误区
有些小伙伴会有疑问,就是说既然我都有了Set数据类型,还用HyperLogLog有啥用?
HyperLogLog只进行基数统计,并不存储数据,只记录数量不记录数据
HyperLogLog特点
- 消耗空间很小,只占用12K内存来记录基数,12K的内存并不是添加数据就一下占用12K,是随着数据的不断增大而增大
- 核心算法是基数估值算法,拥有0.81%的误差
- 执行pfmerge后占用内存12K,无论之前的数据有多大
GEO
用于地理位置计算的相关操作
// 添加坐标点
geoadd key longitude latitude member [longitude latitude member...]
// 获取坐标点
geopos key member [member ...]
// 计算坐标点距离
geodist key member1 member2 [unit]
// 根据坐标求范围内的数据
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]
// 获取指定点对应坐标hash值
geohash key member [member...]