English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية

Redis GEO

Redis GEO 主要用于存储地理位置信息,并对存储的信息进行操作,该功能在 Redis 3.2 版本新增。

Redis GEO 操作方法有:

  • geoadd:添加地理位置的坐标。

  • geopos:获取地理位置的坐标。

  • geodist:计算两个位置之间的距离。

  • georadius:根据用户给定的经纬度坐标来获取指定范围内的地理位置集合。

  • georadiusbymember:根据储存在位置集合里面的某个地点获取指定范围内的地理位置集合。

  • geohash:返回一个或多个位置对象的 geohash 值。

geoadd

geoadd 用于存储指定的地理空间位置,可以将一个或多个经度(longitude)、纬度(latitude)、位置名称(member)添加到指定的 key 中。

geoadd 语法格式如下:

GEOADD key longitude latitude member [longitude latitude member ...]

في المثال التالي، يتم استخدامه كـ key Sicily، وPalermo وCatania كأسماء مواقع:

redis> GEOADD Sicily 13.361389 38.115556 "Palermo" 15.087269 37.502669 "Catania"
(integer) 2
redis> GEODIST Sicily Palermo Catania
"166274.1516"
redis> GEORADIUS Sicily 15 37 100 km
1) "Catania"
redis> GEORADIUS Sicily 15 37 200 km
1) "Palermo"
2) "Catania"
redis>

geopos

geopos يستخدم لاسترجاع جميع المواقع المحددة باسم (member) من المفتاح المحدد، حيث يتم استرجاع nil للمواقع غير الموجودة.

تنسيق جملة geopos كالتالي:

GEOPOS key member [member ...]
redis> GEOADD Sicily 13.361389 38.115556 "Palermo" 15.087269 37.502669 "Catania"
(integer) 2
redis> GEOPOS Sicily Palermo Catania NonExisting
1) 1) "13.36138933897018433"
   2) "38.11555639549629859"
2) 1) "15.08726745843887329"
   2) "37.50266842333162032"
3) (nil)
redis>

geodist

geodist يستخدم لتحويل المسافة بين موقعين محددين.

تنسيق جملة geodist كالتالي:

GEODIST key member1 member2 [m|km|ft|mi]

member1 member2 هما موقعان جغرافيان.

شرح آخر للوحدة الأخيرة للقياس:

  • m: متر، الوحدة الافتراضية.

  • km: كيلومتر.

  • mi: ميل.

  • ft: قدم.

  • حساب المسافة بين Palermo و Catania:

  • redis> GEOADD Sicily 13.361389 38.115556 "Palermo" 15.087269 37.502669 "Catania"
    (integer) 2
    redis> GEODIST Sicily Palermo Catania
    "166274.1516"
    redis> GEODIST Sicily Palermo Catania km
    "166.2742"
    redis> GEODIST Sicily Palermo Catania mi
    "103.3182"
    redis> GEODIST Sicily Foo Bar
    (nil)
    redis>

    georadius،georadiusbymember

    georadius يستخدم مركزًا محددًا من خط العرض والطول، ويعيد العناصر الموجودة في مفتاح المفتاح الذي يحتوي على العناصر الموضعية، والتي تبعد عن المركز بمدى لا يتجاوز المسافة القصوى المحددة.

    georadiusbymember و GEORADIUS أوامر مشابهة، يمكن استخدامها لاستخراج العناصر الموجودة في نطاق معين، ولكن مركز georadiusbymember يتم تحديده بواسطة العنصر الموضع المحدد، وليس باستخدام خط العرض والطول لتحديد المركز.

    تنسيق جملة georadius و georadiusbymember كالتالي:

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

    شرح المعلمات:

    • m: متر، الوحدة الافتراضية.

    • km: كيلومتر.

    • mi: ميل.

    • ft: قدم.

    • WITHDIST: العودة مع مكونات الموقع مع مسافة العنصر من المركز.

    • WITHCOORD: العودة أيضًا مكونات الموقع مثل الطول والعرض.

    • WITHHASH: العودة بناءً على قيمة المجموعة التي تم تعريض العنصر الديناميكي بواسطة geohash في شكل عدد عشري عشري من 52 سلسلة. هذا الخيار يستخدم غالبًا في التطبيقات الأساسية أو الت调试، وله تأثير ضئيل.

    • COUNT: تحديد عدد السجلات التي سيتم العودة.

    • ASC: ترتيب النتائج من القريب إلى البعيد.

    • DESC: ترتيب النتائج من البعيد إلى القريب.

    georadius أمثلة:

    redis> GEOADD Sicily 13.361389 38.115556 "Palermo" 15.087269 37.502669 "Catania"
    (integer) 2
    redis> GEORADIUS Sicily 15 37 200 km WITHDIST
    1) 1) "Palermo"
       2) "190.4424"
    2) 1) "Catania"
       2) "56.4413"
    redis> GEORADIUS Sicily 15 37 200 km WITHCOORD
    1) 1) "Palermo"
       2) 1) "13.36138933897018433"
          2) "38.11555639549629859"
    2) 1) "Catania"
       2) 1) "15.08726745843887329"
          2) "37.50266842333162032"
    redis> GEORADIUS Sicily 15 37 200 km WITHDIST WITHCOORD
    1) 1) "Palermo"
       2) "190.4424"
       3) 1) "13.36138933897018433"
          2) "38.11555639549629859"
    2) 1) "Catania"
       2) "56.4413"
       3) 1) "15.08726745843887329"
          2) "37.50266842333162032"
    redis>

    مثال georadiusbymember:

    redis> GEOADD Sicily 13.583333 37.316667 "Agrigento"
    (integer) 1
    redis> GEOADD Sicily 13.361389 38.115556 "Palermo" 15.087269 37.502669 "Catania"
    (integer) 2
    redis> GEORADIUSBYMEMBER Sicily Agrigento 100 km
    1) "Agrigento"
    2) "Palermo"
    redis>

    geohash

    يستخدم Redis GEO geohash لحفظ إحداثيات المواقع الجغرافية.

    يستخدم geohash للحصول على قيمة geohash لأحد أو أكثر من عناصر المواقع.

    نموذج جملة geohash كالتالي:

    GEOHASH key member [member ...]

    مثال:

    redis> GEOADD Sicily 13.361389 38.115556 "Palermo" 15.087269 37.502669 "Catania"
    (integer) 2
    redis> GEOHASH Sicily Palermo Catania
    1) "sqc8b49rny0"
    2) "sqdtr74hyu0"
    redis>