Bitmaps
Bitmaps類型的基礎操作
獲取指定key對應偏移量上的bit值 getbit key offset
設置指定key對應偏移量上的bit值,value只能是1或0 setbit key offset value
Bitmaps類型的擴展操作
業務場景:(redis 應用於信息狀態統計)
電影網站
統計每天某一部電影是否被點播
統計每天有多少部電影被點播
統計每周/月/年有多少部電影被點播
統計年度哪部電影沒有被點播
業務分析:
對指定key按位進行交、並、非、異或操作,並將結果保存到destKey中
bitop op destKey key1 [key2...] op:and:交 or:並 not:非 xor:異或 destKey:存放結果的key
統計指定key中1的數量 bitcount key [start end]
HyperLogLog
統計獨立UV:(redis 應用於獨立信息統計)
原始方案:set
存儲每個用戶的id(字符串)
改進方案:Bitmaps
存儲每個用戶狀態(bit)
全新的方案:Hyperloglog
基數:
基數是數據集去重后元素個數
HyperLogLog 是用來做基數統計的,運用了LogLog的算法
HyperLogLog類型的基本操作:
添加數據:pfadd key element [element ...] pfadd a 1 2 2
統計數據:pfcount key [key ...]
合並數據:pfmerge destkey sourcekey [sourcekey...]
相關說明:
用於進行基數統計,不是集合,不保存數據,只記錄數量而不是具體數據
核心是基數估算算法,最終數值存在一定誤差
誤差范圍:基數估計的結果是一個帶有 0.81% 標准錯誤的近似值
耗空間極小,每個hyperloglog key占用了12K的內存用於標記基數
pfadd命令不是一次性分配12K內存使用,會隨着基數的增加內存逐漸增大
pfmerge命令合並后占用的存儲空間為12K,無論合並之前數據量多少
GEO
GEO類型的基本操作:(redis 應用於地理位置計算)
添加坐標點 key:將若干個坐標放到這個容器里 longitude:經度 latitude:維度 member :地理名稱(可以隨便起)
geoadd key longitude latitude member [longitude latitude member ...]
獲取坐標點 geopos key member [member ...]
計算坐標點距離 geodist key member1 member2 [unit] unit:單位 m、km、...
根據坐標求范圍內的數據 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 ...]