golang byte转string_golang版memcached之groupcache缓存入门

概述

groupcache is a distributed caching and cache-filling library, intended as a replacementfor a pool of memcached nodes in many cases.

groupcache是memcached作者Brad Fitzpatrick的另外一个key/value键值存储项目,是一个轻量级的分布式缓存库,也被称为golang版的memcached,在某些方面可以替代memcached,是goper必读源码入门级项目之一。

主要特点

95958f97d7655fdee1929645dd875df8.png

基本过程

  1. 获取本地缓存和热点缓存
  2. 在本地没有获取到缓存的情况下,使用一致性Hash算法,从远端peer获取数据,这里同时会生成热点数据。
  3. 在远端peer没有获取到缓存情况下,从数据源(mysql,文件等)中获取数据。
  4. 在第2,3步骤中,groupcache有自己的并发控制器,当对于同一个key的多个请求,保证只有一个请求能从远端或者数据源(mysql)中获取或更新缓存,这个请求取到数据后做统一返回,一定程度上减少不必要网络请求和缓存击穿。
  5. 从数据源(mysql,文件)获取的数据设置到本地缓存

groupcache具有自己的优点,既是作为客户端库又是做为服务端,省去繁重的服务集部署,缺点是只适用于更新频率较低的数据。

简单使用

package mainimport (    "errors"    "flag"    "log"    "net/http"    "strings"    "https://github.com/golang/groupcache")//相当于DBvar Store = map[string][]byte{    "red":   []byte("#FF0000"),    "green": []byte("#00FF00"),    "blue":  []byte("#0000FF"),}//初始化Groupcache对象并设置数据源var Group = groupcache.NewGroup("foobar", 64<<20, groupcache.GetterFunc(    func(ctx groupcache.Context, key string, dest groupcache.Sink) error {        log.Println("looking up", key)        v, ok := Store[key]        if !ok {            return errors.New("color not found")        }        dest.SetBytes(v)        return nil    },))func main() {    addr := flag.String("addr", ":8080", "server address")    peers := flag.String("pool", "http://localhost:8080", "server pool list")    flag.Parse()    //路由    http.HandleFunc("/color", func(w http.ResponseWriter, r *http.Request) {        color := r.FormValue("name")        var b []byte        err := Group.Get(nil, color, groupcache.AllocatingByteSliceSink(&b))        if err != nil {            http.Error(w, err.Error(), http.StatusNotFound)            return        }        w.Write(b)        w.Write([]byte{''})    })    //注册连接池peer    p := strings.Split(*peers, ",")    pool := groupcache.NewHTTPPool(p[0])    pool.Set(p...)    http.ListenAndServe(*addr, nil)}

在浏览器中可以多次访问,查看结果:

a148990aeabbc0d22ecc394ca051185b.png

下节课将为同学详细讲一下groupcache的架构分析

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值