Redis學習日誌 三種特殊資料型別

2021-10-09 18:47:23 字數 4576 閱讀 1100

使用場景:定位?附近的人?打車距離計算?

redis的geo在redis3.2版本推出了,這個功能可以推算兩地之間的地理距離

查詢地理位置及經緯度:

#getadd	新增地理位置

127.0.0.1:6379> geoadd china:city 116.40 39.90 beijing #geoadd 《經度》 《緯度》

(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 104.06 30.65 chengdu

(integer) 1

127.0.0.1:6379> geoadd china:city 106.09 30.79 nanchong

(integer) 1

getpos

#getpos 獲取指定城市的經度和緯度

127.0.0.1:6379> geopos china:city nanchong

1) 1)

"106.09000056982040405"

2)"30.78999932842934584"

geodist

返回兩個給定位置之間的距離。

如果兩個位置之間的其中乙個不存在, 那麼命令返回空值。

指定單位的引數 unit 必須是以下單位的其中乙個:

127.0.0.1:6379> geodist china:city nanchong chengdu km		#檢視直線距離

"194.7264"

127.0.0.1:6379> geodist china:city beijing chengdu km

"1518.4302"

127.0.0.1:6379> geodist china:city beijing shanghai km

"1067.3788"

georadus

#以設定的經緯度為圓心,radiss為半徑,向周圍搜尋

127.0.0.1:6379> georadius china:city 105 30 500 km withdist withcoord

1) 1)

"chengdu"

2)"115.6341"

#withdist 為直線距離

3) 1)

"104.05999749898910522"

#withcoord為經緯度

2)"30.6499990746355806"

2) 1)

"nanchong"

2)"136.5874"

3) 1)

"106.09000056982040405"

2)"30.78999932842934584"

127.0.0.1:6379> georadius china:city 105 30 500 km withdist withcoord count 1 #用count規定個數

1) 1)

"chengdu"

2)"115.6341"

3) 1)

"104.05999749898910522"

2)"30.6499990746355806"

georaduisbymember

#通過key中元素來查詢周圍符合條件的元素

127.0.0.1:6379> georadiusbymember china:city nanchong 200 km withdist withcoord

1) 1)

"chengdu"

2)"194.7264"

3) 1)

"104.05999749898910522"

2)"30.6499990746355806"

2) 1)

"nanchong"

2)"0.0000"

3) 1)

"106.09000056982040405"

2)"30.78999932842934584"

geohash

該命令將返回11個字元的geohash字串

#將二維的經緯度轉化為一維的雜湊值

127.0.0.1:6379> geohash china:city beijing chengdu

1)"wx4fbxxfke0"

2)"wm3yrgwjjt0"

geo的底層實現是zset,所以我們可以通過zset的命令來操作geo

127.0.0.1:6379> zrange china:city 0 -1

1)"chengdu"

2)"nanchong"

3)"shanghai"

4)"beijing"

127.0.0.1:6379> zrem china:city nanchong

(integer) 1

127.0.0.1:6379> zrange china:city 0 -1

1)"chengdu"

2)"shanghai"

3)"beijing"

簡介

hyperloglog是redis基數(無重複)統計的演算法

優點:占用的記憶體是固定的,用12kb的記憶體可以儲存2^64不同元素的計數,從記憶體角度來看,hyperloglog是首選

傳統的方式是使用set方法儲存使用者的id,可以統計set的元素數量來作為人數

這個方式在儲存大量的使用者id,就會比較麻煩!我們的目的是計數而不是儲存使用者id!

測試

127.0.0.1:6379> pfadd mykey a a b c d e

(integer) 1

127.0.0.1:6379> pfcount mykey #只計算集合的基數

(integer) 5

127.0.0.1:6379> pfadd mykey1 d e f g h

(integer) 1

127.0.0.1:6379> pfmerge mykey2 mykey mykey1 #求兩個集合的並集並轉化為乙個新的集合

ok127.0.0.1:6379> pfcount mykey2

(integer) 8

位儲存

操作二進位制位來進行資料記錄,一般用於兩種狀態的記錄,比如:

統計使用者資訊:登入,未登入;打卡,未打卡 可以用0 1來描述

測試

比如說,記錄一周的打卡記錄,0為未打卡,1為打卡

127.0.0.1:6379> setbit sign 0 1

(integer) 0

127.0.0.1:6379> setbit sign 1 1

(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 1

(integer) 0

127.0.0.1:6379> setbit sign 5 1

(integer) 0

127.0.0.1:6379> setbit sign 6 1

(integer) 0

獲取某一天的情況

127.0.0.1:6379> getbit sign 0	#獲取星期一的打卡狀態		

(integer) 1

127.0.0.1:6379> getbit sign 2 #獲取週日的打卡狀態

(integer) 0

統計一段時間內的打卡數

127.0.0.1:6379> bitcount sign

(integer) 6

Redis三種特殊資料型別

這個東西可以推算兩地的位置的資訊,比如說兩地的距離,方圓幾里的人 官方文件只給出了如上六個命令 以上是存入相關城市緯度經度資訊,注意這裡前面是緯度後面是經度,不要弄反了,南極和北極無法直接新增 如果兩個位置之間的其中乙個不存在,那麼命令返回空值。指定單位的引數 unit 必須是以下單位的其中乙個 只...

Redis 4 三種特殊資料型別

geo 底層的實現原理其實就是zset!我們可以使用zset命令來操作geo 基數 乙個集合 不重複的元素個數 基數 5,可以接受誤差 簡介 redis2.8.9版本就更新了hyperloglog資料結構 redis hyperloglog 技術統計的演算法 網頁的uv 乙個人訪問乙個 多次,但還是...

06 redis的三種特殊型別

geospatial型別可以用在以下場景中 1 朋友的地位 2 附近的人 3 打車距離計算 城市經緯度查詢 這個 可以查詢城市的經緯度,用於測試geospatial資料型別 geospatial底層是zset所以zset的命令可以操作geospatial 比如需要刪除乙個geospatial中的元素...