![](https://img-blog.csdnimg.cn/20201014180756928.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
groupcache
文章平均质量分 72
随风奔跑尿飞扬
在梦想的道路上越摔越疼~
有提供工作机会老板请发邮件到 1403539044@qq.com
展开
-
详解golang GMP(一)
最近在研究go语言中,高性能缓存的实现,发现需要考虑到很多因素。(go语言中groupcache缓存库的源码解析可以看这一篇golang中cache组件的使用之groupcache(三)) 这片文章主要讲解 golang 中的GMP。 开篇 提到GMP, 我们需要从最基础的进程、线程讲起。 网络上有很多进程线程的文章,本篇另辟蹊径,用故事举例的方式帮助大家理解。 本篇文章有不当之处希望大家可以指出。 进程、线程 并发与并行 大家都知道,在特定场景下(比如向1w台服务器发送指令),使用多线程或多进程会提升执行原创 2021-06-10 14:41:13 · 485 阅读 · 0 评论 -
golang中cache组件的使用之groupcache(三)
本篇主要解析groupcache源码中的关键部分, lru的定义以及如何做到同一个key只加载一次。 缓存填充以及加载抑制的实现 上篇有提到load函数的实现, 缓存填充的逻辑也体现在这里。 groupcache尽量避免从源中获取数据,当本地数据缺失时会先从peer中获取,peer中命中则直接填充到本地,未命中才会从源中加载,这正是缓存填充的实现逻辑。 而加载抑制,避免重复加载的功能是依靠 singleflight包实现的。 这个包中主要有两个结构体: call用来存放获取结果(val)和错误(err),原创 2021-06-09 10:36:43 · 209 阅读 · 3 评论 -
golang中cache组件的使用之groupcache(一)
golang中cache组件有很多, 比如groupcache、bigcache等。 本文介绍groupcache的使用。 groupcache简介 groupcache是memcache的作者开源的一个项目,在许多情况下,它是memcached的替代品。 对比memcache,相似处: 按键选择哪个对等体负责该键 不同处: 不需要运行单独的一组服务器,从而大大减少了部署/配置的痛苦。Groupcache是一个客户端库,也是一个服务器。它连接到自己的对等点,形成分布式缓存。 可以与存储服务集成,不需要原创 2021-06-08 17:26:40 · 794 阅读 · 0 评论 -
golang中cache组件的使用之groupcache(二)
本篇主要解析groupcache源码。 groupcache使用一个map类型的全局变量 groups存储所有的缓存组。 初始化 创建group时, 会添加一个冲突锁。作者预留了初始化函数callInitPeerServer,但是并为做实现。 mu.Lock() defer mu.Unlock() initPeerServerOnce.Do(callInitPeerServer) 使用 singleflight.Group保证同一key只获取一次,共享结果。这个函数后面解析。 name 缓存组的名字 ge原创 2021-06-09 09:56:20 · 284 阅读 · 0 评论