天天看點

Redis學習筆記15----進階資料類型(Bitmaps HyperLogLog GEO)

Bitmaps基本操作

  • 設定指定key對應偏移量上的bit值,隻能是0或1
setbit key offset value
# 可以認為key這個空間是一個連續的全部是0的字元串,
# setbit操作在對應位置設定為0或1
           
  • 擷取指定key對應偏移量上的值
getbit key offset
           

Bitmaps擴充操作

  • 統計指定key中1的數量
  • 對指定key按位進行交、并、非、異或操作,并将結果儲存在destKey中
bitop op destKey key1 key2 ...
# op可是:and or not xor
           

HyperLogLog

用于基數統計,用了LogLog算法

基數:一組資料中不重複的資料的總數

基本操作

  • 添加資料
pfadd key element1  element2 ...
           
  • 統計資料
pfcount key1 key2 ...
           
  • 合并資料
pfmerge destKey sourseKey1 sourceKey2 ...
           

相關說明:

  • HyperLogLog用于基數統計,不是集合不儲存資料,隻記錄數量而不記錄具體資料
  • 核心是基數估算算法,最終數值存在一定誤差
  • 誤差範圍:基數估計的結果是一個帶有0.81%标準錯誤的近似值
  • 消耗空間很小,每個hyperlogog key占用了12K的記憶體用來标記基數
  • pfadd指令不是一次性配置設定12K的記憶體,會随着基數的增加記憶體逐漸增大
  • pfmerge合并後占用的存儲空間為12K,無論合并之前的資料量是多少

GEO基本操作

  • 添加坐标點
geoadd key 經度1 緯度1 member1 經度2 緯度2 member2 ...
# 這裡的key相當與存放很多個坐标點的容器,不同容器之間不能互相通路
# member是該坐标點的名稱
# 經度緯度與現實中地圖上的經緯度一一對應
           
  • 擷取坐标點
geopos key member
# 傳回結果是度分秒的形式顯示的
           
  • 計算兩點距離
geodist key member1 member2 [m/km]
# 預設顯示距離為米
# 該計算值即為現實中兩點之間的直線距離
           
  • 一堆點中求在給定點半徑為radius的範圍内的點
georadius key 經度 次元 radius m|km|ft|mi [withcoord] [withdist] [ASC|DESC]
# keys: 一堆點的容器名
# radius:半徑,機關可選m|km|ft|mi
# withcoord:将點的坐标也顯示出來
# withdist:将距離顯示出來
# 給定點的坐标随意,不一定是key中已經有的點
           
  • 點範圍内的點數,給定點是在key中已經包含的點