groupcache部分概念理解

369 阅读1分钟

概念理解

group

group即为一种归类,比如我们定义了一个静态网站,里面有文件、图片、文字,那么我们就可以定位多个 group,分别命名为file/image/text等,这样我们在查询的时候就可以制定对应的group name,举例如下:

var (
	peersAddrs = []string{"http://127.0.0.1:8001", "http://127.0.0.1:8002", "http://127.0.0.1:8003"}
)

func main() {
	fmt.Println("len args:", len(os.Args))
	localAddr := os.Args[1]
	fmt.Println("localaddr:", localAddr)
	peers := groupcache.NewHTTPPool("http://" + localAddr)
	peers.Set(peersAddrs...)
	
	// 这里定义了一个group名字为image
	var imageCache = groupcache.NewGroup("image", 8<<30, groupcache.GetterFunc(
    	func(ctx groupcache.Context, key string, dest groupcache.Sink) error {
	        result, err := ioutil.ReadFile(key)
	        if err != nil {
	        	fmt.Printf("read file error %s.\n", err.Error())
	        	return nil
	        }
	        fmt.Printf("asking for %s from local file system\n", key)
	        dest.SetBytes([]byte(result))
	        return nil
	    }))
	// 这里设置/image路由,groupcache会自动解析该/image路由为groupname
	http.HandleFunc("/image", func(rw http.ResponseWriter, r *http.Request) {
	    var data []byte
	    k := r.URL.Query().Get("id")
	    fmt.Printf("user get %s from groupcache\n", k)
	    imageCache.Get(nil, k, groupcache.AllocatingByteSliceSink(&data))
	    rw.Write([]byte(data))
	})
	log.Fatal(http.ListenAndServe(localAddr, nil))
}

TODO 补充