Redis高级——Bitmap 、HyperLogLog 与 GEO

Bitmap

简介

Bitmap 是一串连续的二进制数字,每一位所在的位置称作偏移(offset),Bitmap 通过最小的单位 bit 来进行 0 或者 1 的设置,表示某个元素对应的值或状态

常用指令

  • 设置/修改 key 上的偏移位(offset)的值(value),如果对一个偏移位设置一个值,该位前面的位会自动赋值为 0
setbit key offset value
  • 获取 key 上的偏移位(offset)的值(value)
getbit key offset
  • 对 key 按位进行交、并、非、异或操作,并将结果存入 destkey 中
//and 交
//or 并
//not 非
//xor 异或
bitop operation destkey key [key ...]
  • 统计 key 中 1 的数量,其中 start 和 end 指定的是字节单位,如当前 key 的数据为 00101100 01000001 00001001 ,start 为 0 表示 00101100 ,end 为 2 表示 00001001 ,且包含边界
bitcount key [start end]

HyperLogLog

基本思想

  • HyperLogLog 是一种基数估计算法,用于基数统计,故不保存原数据,只记录数量
  • 基数是指数据集去掉重复元素后的元素个数
  • 空间消耗极小,每个 key 占用 12KB 的内存用于标记基数,适用于输入大体积的数据量
  • 基数估算算法对最终数值存在一定误差,结果是一个带有 0.81% 标准错误(standard error)的近似值
  • pfadd 指令并不会一次性分配 12KB 内存,而是随着基数的增加,逐渐增加内存分配,而 pfmerge 指令会将 sourcekey 合并后存储在 12KB 大小的 key 中
  • Redis 对 HyperLogLog 的存储进行了优化,在计数比较小时,存储空间采用稀疏矩阵,空间占用很小,随着计数变大,稀疏矩阵的占用空间超过了阈值时才会一次性转变成稠密矩阵,占用 12KB 的空间

常用指令

  • 添加数据
pfadd key element [element ...]
  • 统计数据集的元素个数(获取基数值),对于多个 key 则统计个数(基数)之和
pfcount key [key ...]
  • 合并数据
pfmerge destkey sourcekey [sourcekey ...]

GEO

简介

GEO 用于存储地理位置信息,包括空间元素的经度、维度、名称,并提供相关操作

常用指令

  • 添加坐标点
geoadd key longitude latitude member [longitude latitude member ...]
  • 获取坐标点
geopos key member [member ...]
  • 计算坐标点之间距离,unit 指定距离单位
geodist key member1 member2 [unit]
  • 根据坐标求范围内的数据
georadius key longitude latitude radius m|km|ft|mi [WITHCOORD] [WITHDIST] [WITHHASH] [COUNT count] [ASC|DESC] [STORE key] [STOREDIST key]
  • 根据点求范围内的数据
georadiusbymember key member radius m|km|ft|mi [WITHCOORD] [WITHDIST] [WITHHASH] [COUNT count] [ASC|DESC] [STORE key] [STOREDIST key]
  • 获取指定点对应的坐标的 hash 值 
geohash key member [member ...]

猜你喜欢

转载自blog.csdn.net/qq_25274377/article/details/120806050