Memcached Ping() 不会 return 在无效服务器上出错

Memcached Ping() doesn't return an error on an invalid server

我使用memcache做缓存,我用的客户端是https://github.com/bradfitz/gomemcache。当我尝试使用 dummy/invalid 服务器地址启动新客户端然后 ping 到它时,它 return 没有错误。

package main

import (
    "fmt"
    m "github.com/bradfitz/gomemcache"
)

func main() {
    o := m.New("dummy_adress")
    fmt.Println(o.Ping()) // return no error
}

我认为它应该是 return 错误,因为服务器无效。我想念什么?

看起来 New() 调用忽略了 SetServers 的 return 值:

func New(server ...string) *Client {
    ss := new(ServerList)
    ss.SetServers(server...)
    return NewFromSelector(ss)
}

SetServers() 函数只会将服务器列表设置为有效服务器(在 你的情况:没有服务器)和 Ping() 函数只会 ping 服务器 设置,因为没有设置服务器,所以它实际上什么都不做。

这可以说是一项功能;如果您有 4 台服务器,其中一台出现故障,那就是 不是真正的问题。即使只有 1 个服务器,内存缓存通常也是可选的。

您可以通过错误检查复制 New() 逻辑:

ss := new(memcache.ServerList)
err := ss.SetServers("example.localhost:11211")
if err != nil {
    panic(err)
}
c := memcache.NewFromSelector(ss)

err = c.Ping()
if err != nil {
    panic(err)
}

给出:

panic: dial tcp 127.0.0.1:11211: connect: connection refused