如何使用redis geo radius命令go lang

时间:2016-07-21 12:34:13

标签: go redis geo radius

我和Go lang一起开发并且很新。我想使用redis GEORADIUS命令并取回我的结果,包括距离。

我现在使用了两个包radix.v2和redigo来尝试获得结果,但没有任何乐趣。使用SET和GET之类的简单命令没有问题。

非常感谢任何帮助。

编辑:添加代码: - )

package main

import (
  "fmt"
  "github.com/mediocregopher/radix.v2/redis"
  //"reflect"
  "encoding/json"
)

var (
  client *redis.Client
)

type Facility struct {
  Id string
  Dist string
}

func main() {
  client, err := redis.Dial("tcp", "192.168.99.100:6379")
  if err != nil {
    // handle err
  }

  surname, err := client.Cmd("GET", "surname").Str()
  if err != nil {
    // handle err
  }

  fmt.Println(surname)

  reply, _ := client.Cmd("GEORADIUS", "venues", 50, 0, 25, "mi", "WITHDIST", "ASC").Array()
  if err != nil {
    fmt.Println(err)
  }

  //fmt.Println(reflect.TypeOf(reply))
  //fmt.Println(reply)

  var facilities []Facility

  for _, results := range reply {
    facility, _ := results.Array()

    id, _ := facility[0].Str()
    dist, _ := facility[1].Str()

    facilities = append(facilities, Facility{
      Id: id,
      Dist: dist,
    })
  }

  //fmt.Println(facilities)

  resp, _ := json.Marshal(facilities)
  fmt.Fprintf(w, string(resp))    
}

干杯 斯蒂芬

1 个答案:

答案 0 :(得分:0)

您可以查看redis包中的代码。

文件commands.go具有所有签名

下面有几个签名

GeoAdd(键字符串,geoLocation ... * GeoLocation)* IntCmd GeoPos(密钥字符串,成员...字符串)* GeoPosCmd GeoRadius(key string,longitude,latitude float64,query * GeoRadiusQuery)GeoRadiusByMember(key,member string,query * GeoRadiusQuery) GeoDist(键字符串,member1,member2,单位字符串)* FloatCmd