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必读源码入门级项目之一。
主要特点
基本过程
- 获取本地缓存和热点缓存
- 在本地没有获取到缓存的情况下,使用一致性Hash算法,从远端peer获取数据,这里同时会生成热点数据。
- 在远端peer没有获取到缓存情况下,从数据源(mysql,文件等)中获取数据。
- 在第2,3步骤中,groupcache有自己的并发控制器,当对于同一个key的多个请求,保证只有一个请求能从远端或者数据源(mysql)中获取或更新缓存,这个请求取到数据后做统一返回,一定程度上减少不必要网络请求和缓存击穿。
- 从数据源(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缓存入门相关推荐
- golang byte转string_Golang和Rust语言常见功能/库
时下最流行.最具发展前途的的两门语言是Golang和Rust.Golang语言简洁.高效.并发.并且有个强大的囊括了常见功能标准库.与之相对比,Rust语言则主要是安全.高性能.虽然Rust没有gol ...
- golang byte转string_golang面试题:怎么避免内存逃逸?
问题 怎么避免内存逃逸? 怎么答 在runtime/stubs.go:133有个函数叫noescape.noescape可以在逃逸分析中隐藏一个指针.让这个指针在逃逸分析中不会被检测为逃逸. // n ...
- golang byte转string_golang系列——实战http服务器
上一篇讲解了client端相关的知识,这一篇讲解服务端.golang语言可以快速实现一个简单的server端,如下所示: package 上述代码就轻松实现一个监听本地8000端口的服务端.大家可能注 ...
- golang []byte 和 string相互转换
原文链接:golang []byte和string相互转换 测试例子 package mainimport ("fmt" )func main() {str2 := "h ...
- golang byte 和 java byte 的区别
大家应该都了解,java byte 的范围是 -128-127,而golang byte 是uint8的别名,范围是0-255.那么要把java byte 转成 golang byte 怎么转呢? 方 ...
- Golang byte 拼接方法性能对比
Golang byte 拼接方法性能对比 最近项目上遇到需要将[]Byte进行拼接的需求,对[]Byte拼接的各种方法进行了对比,测试代码如下: package main import (" ...
- 第一节 Memcached分布式缓存入门
关于Memcached的博文太多了,以下是个人学习的收集整理. 本节讨论问题: 简单介绍与应用 下载安装注意事项 简单测试 Memcached分布式原理 一.介绍与应用 在常规的WEB开发下,基本都会 ...
- Memcached集成Spring缓存环境构建
2019独角兽企业重金招聘Python工程师标准>>> Memcached简要说明: Memcached 是一个高性能的分布式内存对象缓存系统,用于动态Web应用以减轻数据库负载.它 ...
- Memcached Redis构建缓存服务器
一.Memcached介绍 RDBMS即关系数据库管理系统(Relational Database Management System) 许多Web应用都将数据保存到 RDBMS中,应用服务器从中读取 ...
最新文章
- 学Python培训有什么用
- nvm 装 nodejs 重启终端失效的解决方法
- OpenGL Transform Feedback转换反馈的实例
- 2020 . NET大会日程公布!行程亮点全曝光
- 【Python3网络爬虫开发实战】1.2.6-aiohttp的安装
- EasyConnect for Linux
- win10企业版打开自带截图工具
- Jmeter(十九) 后置处理器JSON Extractor 提取json的多个值
- 冷美人为什么“冷”?
- Nuget私有服务搭建实战
- java文件输入流FileInputStream
- 大淘客cms源码三合一导航,自定义底部导航腰部导航
- 【cocos源码学习】cocos2d-x-4.0 Android Demo工程结构的简析
- 密码太多不知道怎么记录?不如自己写个密码箱小程序
- 【Tensorflow】报错:FailedPreconditionError: Attempting to use uninitialized value keep_prob_7
- 苹果在 WWDC 上宣布放弃英特尔转向 ARM 芯片,会有哪些优势?你的 Mac 将何去何从?
- 马克思主义哲学(哲学概论)
- Google VR 学习小结
- SpringCloudGateway爆漏洞,快看看你的服务中招没?
- 利用Java语言编写一个猜数字游戏(有次数限制)