使用場景:定位?附近的人?打車距離計算?
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中的元素...