天天看點

Redis(四)Redis的三種特殊資料類型:GEO、Hyperloglog和Bitmap前言GEO 的資料結構總共有六個指令

前言

Redis有三種特殊的資料格式:GEO存儲地理坐标和計算,Hyperloglog用于不重複的基數統計,Bitmap位圖用于統計互斥事件。

GEO 的資料結構總共有六個指令

  • geoadd
  • geopos
  • geodist
  • georadius
  • georadiusbymember
  • geohash

Redis GEOADD 指令

說明

 将指定的地理空間位置(緯度、經度、名稱)添加到指定的key中。

執行個體

在任意一個城市經緯度查詢網站進行查詢擷取城市資訊,然後我們對其進行操作:

參數:geoadd [key] [longitude(經度)] [latitude(次元)]
geoadd chinaCity 113.27 23.15 GuangZhou
           
Redis(四)Redis的三種特殊資料類型:GEO、Hyperloglog和Bitmap前言GEO 的資料結構總共有六個指令

GEOPOS - geo 查詢指令

相當于查詢geo資訊

執行個體

參數:geopos [key]
Redis(四)Redis的三種特殊資料類型:GEO、Hyperloglog和Bitmap前言GEO 的資料結構總共有六個指令

GEODIST - 檢視坐标之間的舉例

距離結果參數:

  • m辨別機關為米
  • km辨別機關為千米
  • mi辨別機關為英裡
  • ft辨別機關為英尺

執行個體

  北京到廣州的距離:再添加一下北京的坐标:geoadd chinaCity 116.23 40.22 BeiJing

參數:geodist [key] [hashkey(字段)] [hashkey(字段)] 機關(不要也可以,預設米)
Redis(四)Redis的三種特殊資料類型:GEO、Hyperloglog和Bitmap前言GEO 的資料結構總共有六個指令

傳回結果為:"1918.8645"

查詢北京到廣州的直線距離:1856km 實際差不多

GEORADIUS - 查詢半徑中的資料

業務背景:擷取我附近的人?城市?

執行個體

參數:geodist [key] [hashkey(字段)] [hashkey(字段)] 機關(不要也可以,預設米)
georadius chinaCity 100 30 2000 km   #以經度100,緯度30 半徑2000km的内的城市
georadius chinaCity 100 30 2000 km withdist  #顯示城市名稱和到中心位置的距離
georadius chinaCity 100 30 2000 km withcoord  #顯示符合條件的定位
georadius chinaCity 100 30 2000 km withcoord count 1  #輸出指定個數符合條件的
           

效果分别如下

Redis(四)Redis的三種特殊資料類型:GEO、Hyperloglog和Bitmap前言GEO 的資料結構總共有六個指令
Redis(四)Redis的三種特殊資料類型:GEO、Hyperloglog和Bitmap前言GEO 的資料結構總共有六個指令
Redis(四)Redis的三種特殊資料類型:GEO、Hyperloglog和Bitmap前言GEO 的資料結構總共有六個指令
Redis(四)Redis的三種特殊資料類型:GEO、Hyperloglog和Bitmap前言GEO 的資料結構總共有六個指令

Hyperloglog基數統計

說明

常用于人數統計,比如說多次通路網站的使用者,如何統計真實的不重複的通路人數:篩選重複的id——基數統計 【不重複的元素】。

那為什麼不用SET呢?因為我們的最終目的不是為了儲存id而是計數。如何了解?

比如說2^64個不同id,我們隻需要12kb記憶體,每個id存一個bool即可無需存id字元串,便可知道id是否存在。leetcode常用這種hash算法。

執行個體

127.0.0.1:6379> pfadd class1 a b c d e
(integer) 0
127.0.0.1:6379> pfcount class1
(integer) 5
127.0.0.1:6379> pfadd class2 f g h i j
(integer) 1
127.0.0.1:6379> pfcount class2
(integer) 5
127.0.0.1:6379> pfmerge class3 class1 class2
OK
127.0.0.1:6379> pfcount class3
(integer) 10
127.0.0.1:6379>
           

Redis(四)Redis的三種特殊資料類型:GEO、Hyperloglog和Bitmap前言GEO 的資料結構總共有六個指令

Bitmap

說明

Bitmap就是通過一個

bit

位來表示某個元素對應的值或者狀态。Bitmaps位圖操作二進制進行記錄,隻有0和1兩個狀态。

比如統計vip和非vip使用者,和其它的狀态:審批,未審批等,以及打卡,想起了優酷的窮vip注解。。。

以打卡為例:365天中每天為一個Bit,一個位元組8bit,隻需要幾十個位元組!

setbit [key] [offset] [value]

getbit [key]

bitcount [key]

舉例 

Redis(四)Redis的三種特殊資料類型:GEO、Hyperloglog和Bitmap前言GEO 的資料結構總共有六個指令
😘如果對你有所幫助點個贊,給點小動力,謝謝啦~