极客兔兔Gee-Cache Day5
type Group struct {
name string // 缓存名称
getter Getter // 回调函数
mainCache cache // 缓存
peers PeerPicker // 集成HTTPPool
}
// 将HTTPPool注入到group中
func (g *Group) RegisterPeers(peer PeerPicker) {
if g.peers != nil {
panic("最多一个peerPicker")
}
g.peers = peer
}
// 缓存未命中 向远程节点请求
func (g *Group) load(key string) (Value ByteView, err error) {
if g.peers != nil {
if peer, ok := g.peers.PickPeer(key); ok {
if value, err := g.getFromPeer(peer, key); err == nil {
return value, nil
}
log.Println("获取Peer失败")
}
}
// 不存在远程节点 调用回调函数
return g.getLocally(key)
}
// 向远处节点请求
func (g *Group) getFromPeer(peer PeerGetter, key string) (ByteView, error) {
bytes, err := peer.Get(g.name, key)
if err != nil {
return ByteView{}, err
}
return ByteView{b: bytes}, nil
}