【redis】三種特殊數據類型

geospatial 地理位置

底層是zset實現的, 可以用zset的命令操作

geoadd 添加經緯度

GEOADD key longitude latitude member [longitude latitude member ...]
geoadd 用於存儲指定的地理空間位置,可以將一個或多個經度(longitude)、緯度(latitude)、位置名稱(member)添加到指定的 key 中。
兩極無法直接添加,一般會下載城市數據,直接通過java程序一次導入

127.0.0.1:6379> geoadd china:city 16.40 39.90 beijing
(integer) 1
127.0.0.1:6379> geoadd china:city 121.47 31.23 shanghai
(integer) 1
127.0.0.1:6379> geoadd china:city 106.50 29.53 chongqing 114.05 22.52 shenzhen
(integer) 2
127.0.0.1:6379> geoadd china:city 120.16 30.24 hangzhou 108.96 34.26 xian
(integer) 2

geopos 獲取經緯度

GEOPOS key member [member ...]
geopos 用於從給定的 key 裏返回所有指定名稱(member)的位置(經度和緯度),不存在的返回 nil。

127.0.0.1:6379> geopos china:city beijing #獲取指定城市的經度和緯度
1) 1) "16.39999955892562866"
   2) "39.90000009167092543"
127.0.0.1:6379> geopos china:city chongqing
1) 1) "106.49999767541885376"
   2) "29.52999957900659211"

geodist 給定位置之間的距離

geodist 用於返回兩個給定位置之間的距離
GEODIST key member1 member2 [m|km|ft|mi]
最後一個距離單位參數說明:
m :米,默認單位。
km :千米。
mi :英里。
ft :英尺。





127.0.0.1:6379> geodist china:city chongqing hangzhou km #查看重慶到杭州的直線距離
"1318.8910"

georadius、georadiusbymember 半徑

georadius 以給定的經緯度爲中心, 返回鍵包含的位置元素當中, 與中心的距離不超過給定最大距離的所有位置元素。
GEORADIUS key longitude latitude radius m|km|ft|mi [WITHCOORD] [WITHDIST] [WITHHASH] [COUNT count] [ASC|DESC] [STORE key] [STOREDIST key]

參數說明:

m :米,默認單位。
km :千米。
mi :英里。
ft :英尺。
WITHDIST: 在返回位置元素的同時, 將位置元素與中心之間的距離也一併返回。
WITHCOORD: 將位置元素的經度和維度也一併返回。
WITHHASH: 以 52 位有符號整數的形式, 返回位置元素經過原始 geohash 編碼的有序集合分值。 這個選項主要用於底層應用或者調試, 實際中的作用並不大。
COUNT 限定返回的記錄數。
ASC: 查找結果根據距離從近到遠排序。
DESC: 查找結果根據從遠到近排序。








127.0.0.1:6379> GEORADIUS china:city 110 30 1000 km # 以110 30 這個經緯度爲中心 尋找方圓1000km內的城市
1) "chongqing"
2) "xian"
3) "shenzhen"
4) "hangzhou"
127.0.0.1:6379> GEORADIUS china:city 110 30 500 km
1) "chongqing"
2) "xian"

georadiusbymember 的中心點是由給定的位置元素決定的

GEORADIUSBYMEMBER key member radius m|km|ft|mi [WITHCOORD] [WITHDIST] [WITHHASH] [COUNT count] [ASC|DESC] [STORE key] [STOREDIST key]

127.0.0.1:6379> GEORADIUSBYMEMBER china:city hangzhou 1000 km #以杭州爲中心 半徑1000km
1) "hangzhou"
2) "shanghai"

geohash

Redis GEO 使用 geohash 來保存地理位置的座標
geohash 用於獲取一個或多個位置元素的 geohash 值。
GEOHASH key member [member ...]
將二維的經緯度轉換成一維的字符串,如果兩個字符串越接近,則距離越近


127.0.0.1:6379> geohash china:city hangzhou chongqing 
1) "wtmkn31bfb0"
2) "wm5xzrybty0"

hyperloglog

  1. HyperLogLog 是用來做基數統計的算法
  2. 基數:比如數據集 {1, 3, 5, 7, 5, 7, 8}, 那麼這個數據集的基數集爲 {1, 3, 5 ,7, 8}, 基數(不重複元素)爲5。
  3. HyperLogLog 的優點是,在輸入元素的數量或者體積非常非常大時,計算基數所需的空間總是固定 的、並且是很小的。在 Redis 裏面,每個 HyperLogLog 鍵只需要花費 12 KB 內存,就可以計算接近 2^64 個不同元素的基 數。
    會有一定誤差!!
    應用場景:
    網站統計用戶訪問量 uv


pfadd

127.0.0.1:6379> pfadd mykey a b c d e
(integer) 1
127.0.0.1:6379> pfadd mykey1 a b q w o
(integer) 1

pfcount 統計基數數量

127.0.0.1:6379> pfcount mykey
(integer) 5
127.0.0.1:6379> pfcount mykey1
(integer) 5

pfmerge 合併多個hyperloglog

127.0.0.1:6379> pfmerge mykey3 mykey mykey1
OK
127.0.0.1:6379> pfcount mykey3
(integer) 8

bitmap

應用場景:

  • 統計用戶信息 :活躍、不活躍! 登錄、未登錄! 打卡!

只要是兩個狀態的,就可以使用bitmaps

bitmaps 都是操作二進制進行位記錄

setbit

使用bitmap來記錄 週一到週日的打卡

127.0.0.1:6379> setbit sign 0 1
(integer) 0
127.0.0.1:6379> setbit sign 1 0
(integer) 0
127.0.0.1:6379> setbit sign 2 0
(integer) 0
127.0.0.1:6379> setbit sign 3 1
(integer) 0
127.0.0.1:6379> setbit sign 4 0
(integer) 0
127.0.0.1:6379> setbit sign 5 0
(integer) 0
127.0.0.1:6379> setbit sign 6 1
(integer) 0

getbit

查看某一天是否有打卡

127.0.0.1:6379> getbit sign 3
(integer) 1
127.0.0.1:6379> getbit sign 6
(integer) 1

bitcount 統計

127.0.0.1:6379> bitcount sign #統計這周的打卡記錄
(integer) 3
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章