概述

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必读源码入门级项目之一。

主要特点

基本过程

  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)}

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

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

golang byte转string_golang版memcached之groupcache缓存入门相关推荐

  1. golang byte转string_Golang和Rust语言常见功能/库

    时下最流行.最具发展前途的的两门语言是Golang和Rust.Golang语言简洁.高效.并发.并且有个强大的囊括了常见功能标准库.与之相对比,Rust语言则主要是安全.高性能.虽然Rust没有gol ...

  2. golang byte转string_golang面试题:怎么避免内存逃逸?

    问题 怎么避免内存逃逸? 怎么答 在runtime/stubs.go:133有个函数叫noescape.noescape可以在逃逸分析中隐藏一个指针.让这个指针在逃逸分析中不会被检测为逃逸. // n ...

  3. golang byte转string_golang系列——实战http服务器

    上一篇讲解了client端相关的知识,这一篇讲解服务端.golang语言可以快速实现一个简单的server端,如下所示: package 上述代码就轻松实现一个监听本地8000端口的服务端.大家可能注 ...

  4. golang []byte 和 string相互转换

    原文链接:golang []byte和string相互转换 测试例子 package mainimport ("fmt" )func main() {str2 := "h ...

  5. golang byte 和 java byte 的区别

    大家应该都了解,java byte 的范围是 -128-127,而golang byte 是uint8的别名,范围是0-255.那么要把java byte 转成 golang byte 怎么转呢? 方 ...

  6. Golang byte 拼接方法性能对比

    Golang byte 拼接方法性能对比 最近项目上遇到需要将[]Byte进行拼接的需求,对[]Byte拼接的各种方法进行了对比,测试代码如下: package main import (" ...

  7. 第一节 Memcached分布式缓存入门

    关于Memcached的博文太多了,以下是个人学习的收集整理. 本节讨论问题: 简单介绍与应用 下载安装注意事项 简单测试 Memcached分布式原理 一.介绍与应用 在常规的WEB开发下,基本都会 ...

  8. Memcached集成Spring缓存环境构建

    2019独角兽企业重金招聘Python工程师标准>>> Memcached简要说明: Memcached 是一个高性能的分布式内存对象缓存系统,用于动态Web应用以减轻数据库负载.它 ...

  9. Memcached Redis构建缓存服务器

    一.Memcached介绍 RDBMS即关系数据库管理系统(Relational Database Management System) 许多Web应用都将数据保存到 RDBMS中,应用服务器从中读取 ...

最新文章

  1. 学Python培训有什么用
  2. nvm 装 nodejs 重启终端失效的解决方法
  3. OpenGL Transform Feedback转换反馈的实例
  4. 2020 . NET大会日程公布!行程亮点全曝光
  5. 【Python3网络爬虫开发实战】1.2.6-aiohttp的安装
  6. EasyConnect for Linux
  7. win10企业版打开自带截图工具
  8. Jmeter(十九) 后置处理器JSON Extractor 提取json的多个值
  9. 冷美人为什么“冷”?
  10. Nuget私有服务搭建实战
  11. java文件输入流FileInputStream
  12. 大淘客cms源码三合一导航,自定义底部导航腰部导航
  13. 【cocos源码学习】cocos2d-x-4.0 Android Demo工程结构的简析
  14. 密码太多不知道怎么记录?不如自己写个密码箱小程序
  15. 【Tensorflow】报错:FailedPreconditionError: Attempting to use uninitialized value keep_prob_7
  16. 苹果在 WWDC 上宣布放弃英特尔转向 ARM 芯片,会有哪些优势?你的 Mac 将何去何从?
  17. 马克思主义哲学(哲学概论)
  18. Google VR 学习小结
  19. SpringCloudGateway爆漏洞,快看看你的服务中招没?
  20. 利用Java语言编写一个猜数字游戏(有次数限制)

热门文章

  1. 对Leader的闲话
  2. 使用easyexcel导出时行高不自动调整的解决
  3. CSDN2019博客之星评选——期待各位大佬的投票!
  4. android textview获取背景颜色,Android TextView背景颜色与背景图片设置
  5. java的异常处理块的形式_Java 异常处理详细解读
  6. cation,validation,qualification有何区别
  7. 归并排序python实现
  8. WPF ListView展示层叠信息
  9. Django模型之Meta选项详解
  10. 网络编程中的常见陷阱之 0x十六进制数(C++字面值常量)