codis
codis copied to clipboard
testonborrow的问题
客户端配置testonborrow=true之后,在执行命令前,会向服务端发送ping命令以检测服务端是否运行正常,在使用codis的情况下,codis是不是不能保证ping命令和正常要执行的命令发送到同一个后端redis上?
就是下面一段代码,r.Multi是不是pipeline命令? 如果multi是一个的话,根据时间取模随机,如果是多个的话,就取第一个的地址。
最好请懂代码的人看一下
func (s *Session) handleRequestPing(r *Request, d *Router) error {
var addr string
var nblks = len(r.Multi) - 1
switch {
case nblks == 0:
slot := uint32(time.Now().Nanosecond()) % MaxSlotNum
return d.dispatchSlot(r, int(slot))
default:
addr = string(r.Multi[1].Value)
copy(r.Multi[1:], r.Multi[2:])
r.Multi = r.Multi[:nblks]
}
if !d.dispatchAddr(r, addr) {
r.Resp = redis.NewErrorf("ERR backend server '%s' not found", addr)
return nil
}
return nil
}
@spinlock 帮忙解答下呗 谢谢