天天看點

十三、Redis進階資料類型Bitmaps、HyperLogLog、GEO

Bitmaps

Bit基本操作

十三、Redis進階資料類型Bitmaps、HyperLogLog、GEO

Bitmaps類型的擴充操作

業務場景 電影網站

  • 統計每天某一部電影是否被點播
  • 統計每天有多少部電影被點播
  • 統計每周/月/年有多少部電影被點播
  • 統計年度哪部電影沒有被點播

業務分析

十三、Redis進階資料類型Bitmaps、HyperLogLog、GEO
  • 對指定key按位進行交、并、非、異或操作,并将結果儲存到destKey中

bitop op destKey key1 [key2…]

and or not xor

  • 統計指定key中1的數量
bitcount key [start end]
十三、Redis進階資料類型Bitmaps、HyperLogLog、GEO
十三、Redis進階資料類型Bitmaps、HyperLogLog、GEO
十三、Redis進階資料類型Bitmaps、HyperLogLog、GEO

HyperLogLog

統計獨立UV

  • 原始方案 set

    存儲每個使用者的id(字元串)

  • 改進方案:Bitmaps

    存儲每個使用者狀态(bit)

  • 全新的方案:Hyperloglog

    基數統計

基數

  • 基數是資料集去重後元素的個數
  • HyoerLogLog是用來做計數統計的,運用了LogLog的算法
    十三、Redis進階資料類型Bitmaps、HyperLogLog、GEO

HyperLogLog類型的基本操作

  • 添加資料
pfadd key element [element …]
  • 統計資料
pfcount key [key …]
  • 合并資料
pfmerge destkey sourcekey [sourcekey …]

相關說明

  • 用于進行計數統計,不是集合,不儲存資料,值記錄數量而不是具體資料
  • 核心是計數估算算法,最終數值存在一定誤差
  • 誤差範圍:計數估計的資料是一個帶有0.81%标準錯誤的近似值
  • 耗空間極小,每個hyperloglog key占用了12k的記憶體用于标記基數
  • pfadd指令不是一次性配置設定12k記憶體使用,會随着基數的增加記憶體逐漸增大
  • Pfmerge指令合并後占用的記憶體空間為12k,無論合并之前
  • 資料量多少
十三、Redis進階資料類型Bitmaps、HyperLogLog、GEO

如果允許容錯,那麼一定可以使用Hyperloglog,如果不允許容錯,就使用set或者自己的資料類型即可。

GEO

GEO類型的基 本操作

geospatial地理位置,這個功能可以推算地理位置的資訊,兩地之間的距離,方圓幾裡的人!

  • 添加坐标點(地理位置)
geoadd key longitude[經度] latitude[緯度] member[名字] [longitude latitude member]
十三、Redis進階資料類型Bitmaps、HyperLogLog、GEO
  • 擷取坐标點
geopos key member[member …]
十三、Redis進階資料類型Bitmaps、HyperLogLog、GEO
  • 計算坐标點距離
geodist key member1 member2 [unit]
十三、Redis進階資料類型Bitmaps、HyperLogLog、GEO
  • 根據坐标求範圍内的資料
十三、Redis進階資料類型Bitmaps、HyperLogLog、GEO
十三、Redis進階資料類型Bitmaps、HyperLogLog、GEO
十三、Redis進階資料類型Bitmaps、HyperLogLog、GEO

繼續閱讀