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
我使用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