redis平常使用之geo

參考網址


環境要求

  • 首先確保已經安裝redis 而且已經啓動php

    圖片描述
  • 確保PHP已經安裝redis擴展html

    php -m | grep redis
    圖片描述

redis相關命令總體一覽

  • GEOADD
  • GEODIST
  • GEORADIUS
  • GEORADIUSBYMEMBER
  • GEOHASH

GEOADD 插入命令

命令: GEOADD key longitude latitude member [longitude latitude member …]git

命令詳解 
- 顧名思義這是一個添加命令
1.向一個geo類型的有序集合中添加數據  
2.能夠傳遞多個參數 同時添加
3.經緯度限制
    有效的經度介於 -180 度至 180 度之間
    有效的緯度介於 -85.05112878 度至 85.05112878 度之間
2.返回成功添加到鍵中的空間元素 不包含已經存在可是更新的元素  

注意:
1.必須按照x,y格式 經度在前 緯度災後

命令使用github

- 首先打開客戶端

正確添加
# geoadd myplace 116.580799 39.929301 me 116.580691 39.929007 you 116.58101 39.928931 other  

錯誤示範
# geoadd test 181 181 one

圖片描述
圖片描述

php中調用redis

// 實例化redis對象
$redis = new \Redis();

// 連接redis 本機host地址 默認端口號
$redis->connect('127.0.0.1', 6379);

// 插入正確數據
$successRes = $redis->geoAdd(
    'myplace', // 鍵值
    116.580799, 39.929301, 'me', // 第一個元素的經緯度 以及對應名稱
    116.580691,39.929007, 'you',
    116.58101, 39.928931, 'other'
);

// 插入錯誤數據
$faildRes = $redis->geoAdd(
    'test',
    181, 181, 'one'
);

var_dump($successRes);
var_dump($faildRes);

圖片描述

GEOPOS 獲取指定元素的位置

命令:GEOPOS key member [member …] 數組

命令詳解:spa

- 獲取位置 百度翻譯說pos多是位置的縮寫
1.返回一個鍵中給定元素的位置
2.參數能夠傳遞多個 
3.返回參數每一項都由兩個元素組成 第一個元素爲經度 第二個元素爲緯度
4.若是給定元素不存在 返回nil

命令使用翻譯

正確使用
# geopos myplace me you other  

錯誤使用 獲取一個不存在元素
# geopos myplace one

圖片描述

PHP中使用code

// 實例化redis對象
$redis = new \Redis();

// 連接redis 本機host地址 默認端口號
$redis->connect('127.0.0.1', 6379);

// 獲取正確數據
$successRes = $redis->geoPos(
    'myplace', // 鍵值
    'me' // 元素名稱
);

// 獲取錯誤數據
$faildRes = $redis->geoPos(
    'myplace', // 鍵值
    'one' // 不存在的元素
);

var_dump($successRes);
var_dump($faildRes);

圖片描述

GEODIST 獲取兩個元素之間的距離

命令: GEODIST key member1 member2 [unit]htm

命令詳解
- 獲取兩個元素之間的距離 dist 距離
1.參數固定 只能計算兩個元素之間的距離
2.最後一個參數 unit 表明單位 默認爲米(m) 有以下幾個參數
    m 表示單位爲米。
    km 表示單位爲公里。
    mi 表示單位爲英里。
    ft 表示單位爲英尺
    
返回值:計算出的距離會以雙精度浮點數的形式被返回 若是給定的位置元素(任何一個)不存在, 那麼命令返回空值

注意:該命令在計算距離時會假設地球爲完美的球形 在極限狀況下 這一假設最大會形成 0.5% 的偏差

命令使用

獲取兩個元素之間的距離 以米爲單位
# geodist myplace me you m

錯誤使用 獲取一個不存在的元素
# geodist myplace me not m

圖片描述

PHP中使用

// 實例化redis對象
$redis = new \Redis();

// 連接redis 本機host地址 默認端口號
$redis->connect('127.0.0.1', 6379);

// 獲取正確的數據
$successRes = $redis->geoDist(
    'myplace', // 鍵值
    'me', // 元素
    'you', // 元素
    'm' // 距離單位
);

// 獲取錯誤的數據
$faildRes = $redis->geoDist(
    'myplace', // 鍵值
    'me', // 元素
    'not' // 不存在的元素
);

var_dump($successRes);
var_dump($faildRes);

圖片描述

GEORADIUS 獲取全部不超過指定經緯度特定距離的全部元素

命令:GEORADIUS key longitude latitude radius m|km|ft|mi [WITHCOORD] [WITHDIST] [WITHHASH] [ASC|DESC] [COUNT count]

命令詳解:
- 獲取指定經緯度內一個半徑的元素信息 radius半徑
1.必須指定經緯度 經度在前 緯度在後
2.能夠指定範圍 範圍單位以下
    m 表示單位爲米  
    km 表示單位爲公里 
    mi 表示單位爲英里
    ft 表示單位爲英尺
3.獲取與給定經緯度之間的距離 須要參數 WITHDIST 單位與給定的距離單位相同
4.獲取返回元素的經緯度 須要參數 WITHCOORD
5.可使用距離進行排序 ASC 從近到遠 DESC 從遠到近
6.返回的數量
 
返回值:返回一個數組

命令使用

獲取一個元素中距離給定座標特定距離的全部元素 顯示距離 顯示座標 按照從近到遠 顯示3條
# georadius myplace 116.578486 39.927244 200 km WITHCOORD WITHDIST ASC COUNT 3

georadius命令

PHP中使用

// 實例化redis對象
$redis = new \Redis();

// 連接redis 本機host地址 默認端口號
$redis->connect('127.0.0.1', 6379);

$options[] = 'WITHDIST'; // 距離
$options[] = 'WITHCOORD'; // 經緯度
$options[] = 'ASC'; // 排序 ASC|DESC
$options['COUNT'] = 3; // 條數

// 獲取正確的數據
$successRes = $redis->geoRadius(
    'myplace', // 鍵值
    '116.578486', // 經度
    '39.927244', // 緯度
    '200', // 距離
    'km', // 距離單位
    $options // 其餘可選參數
);

var_dump($successRes);

圖片描述

GEORADIUSBYMEMBER 獲取全部不超過指定元素特定距離的全部元素

命令:GEORADIUSBYMEMBER key member radius m|km|ft|mi [WITHCOORD] [WITHDIST] [WITHHASH] [ASC|DESC] [COUNT count]

命令詳解
- 根據鍵值中的一個元素獲取指定距離內的元素 至關與GEORADIUS命令的另外一版本
1.須要指定元素 而不是經緯度

注意:元素必須是鍵值中已經存在的元素 返回值也會包含選定的元素

返回值:數組

命令使用

獲取一個元素指定範圍內的元素 選定元素 me 距離 200 單位 m 返回距離 經緯度 從近到遠 3條
# georadiusbymember myplace me 200 m WITHCOORD WITHDIST ASC COUNT 3

圖片描述

PHP中使用

// 實例化redis對象
$redis = new \Redis();

// 連接redis 本機host地址 默認端口號
$redis->connect('127.0.0.1', 6379);

$options[] = 'WITHDIST'; // 距離
$options[] = 'WITHCOORD'; // 經緯度
$options[] = 'ASC'; // 排序 ASC|DESC
$options['COUNT'] = 3; // 條數

// 獲取正確的數據
$successRes = $redis->geoRadiusByMember(
    'myplace', // 鍵值
    'me', // 元素
    '200', // 距離
    'km', // 距離單位
    $options // 其餘可選參數
);

var_dump($successRes);

圖片描述

GEOHASH 獲取一個元素的geo hash值

命令:GEOHASH key member [member …]

命令詳解
- 獲取geo的hash值
1.能夠同時獲取多個元素的hash值

注意:返回的數據須要本身對應

返回值:一個數組 數組的每一個項都是一個 geohash

命令使用

獲取geohash
# geohash myplace me you other

圖片描述

PHP使用

// 實例化redis對象
$redis = new \Redis();

// 連接redis 本機host地址 默認端口號
$redis->connect('127.0.0.1', 6379);

// 獲取正確的數據
$successRes = $redis->geoHash(
    'myplace', // 鍵值
    'me', // 元素
    'you', // 元素
    'other' // 元素
);

var_dump($successRes);

圖片描述

相關文章
相關標籤/搜索