接下来讲什么

今天开始讲groupcache!

Memcached大家应该都不陌生,官网的介绍是:

Free & open source, high-performance, distributed memory object caching system(免费,开源,高性能的分布式内存对象缓存系统)。很多公司的产品都用到了Memcached,不过Memcached是用C语言开发的,我们的目的是提升Golang技能,所以这里我找了Golang版本的Memcached:groupcache来分析。

github地址:https://github.com/golang/groupcache

github上对groupcahe的介绍是:groupcache is a caching and cache-filling library, intended as a replacement for memcached in many cases.也就是说这是一个库,目标是在很多场景下替代memcached.等看完源码我们再反过来看groupcache有哪些优秀的特性,对比来看官方介绍里的一堆特性介绍。

 

项目概览

 

项目源码结构:

咋一看不太直观,consistenthash是一致性哈希,groupcachepb应该是和Protocol Buffers有关系,lru是最近最少使用淘汰算法,singleflight是单航班,什么是单航班后面看了代码再来理解吧~,testpb和groupcachepb一样,pb结尾和Protocol Buffers逃脱不了干系了。剩下的一堆根目录的源码文件啥的肯定是各种调用上面说到的几个包,所以这里我们先看最上面的5个文件夹(package)分别是什么内容,分模块攻破之后再看外层调用逻辑,把知识点再串联到一起。

通过groupcache源码阅读我们能够学到些什么

groupchace明显比cache2go知识量大,源码中至少包含了以下知识点,大家可以提前Google一下这些知识点,比如rpc是什么,golang中如何使用rpc;protobuf怎么用,ring hash(一致性哈希)算法原理,lru算法原理等,singleflight是一种编程技巧,看了源码我们再来体会其中妙处。

  1. rpc

  2. protobuf

  3. ring hash

  4. lru

  5. singleflight

ok,今天先讲到这里,下一讲我们来分析一致性哈希算法,然后看看groupcache中是怎么实现ring hash的。

groupcache源码解析-概览的更多相关文章

  1. Redux系列x:源码解析

    写在前面 redux的源码很简洁,除了applyMiddleware比较绕难以理解外,大部分还是 这里假设读者对redux有一定了解,就不科普redux的概念和API啥的啦,这部分建议直接看官方文档. ...

  2. SLF4J源码解析-LoggerFactory(一)

    slf4j的含义为Simple logging facade for Java,其为简单的为java实现的日志打印工具,本文则对其源码进行简单的分析 JAVA调用SLF4J public class ...

  3. jQuery源码解析资源便签

    最近开始解读jQuery源码,下面的链接都是搜过来的,当然妙味课堂 有相关的一系列视频,长达100多期,就像一只蜗牛慢慢爬, 至少品读三个框架,以后可以打打怪,自己造造轮子. 完全理解jQuery源代 ...

  4. JDK源码及其他框架源码解析随笔地址导航

    置顶一篇文章,主要是整理一下写过的JDK中各个类的源码及其他框架源码解析的文章,方便自己随时阅读也方便网友朋友们阅读与指正 基础篇 从为什么String=String谈到StringBuilder和S ...

  5. iOS开发之Alamofire源码解析

    今天博客中的Alamofire源码的版本是以3.4版本为例.上篇博客系统的对NSURLSession相关的东西进行了详细的解析,详情请看<详解NSURLSession>,为了就是给本篇博客 ...

  6. 【转载】okhttp源码解析

    转自:http://www.open-open.com/lib/view/open1472216742720.html https://blog.piasy.com/2016/07/11/Unders ...

  7. 时序数据库 Apache-IoTDB 源码解析之文件数据块(四)

    上一章聊到行式存储.列式存储的基本概念,并介绍了 TsFile 是如何存储数据以及基本概念.详情请见: 时序数据库 Apache-IoTDB 源码解析之文件格式简介(三) 打一波广告,欢迎大家访问Io ...

  8. Java并发之ReentrantReadWriteLock源码解析(一)

    ReentrantReadWriteLock 前情提要:在学习本章前,需要先了解笔者先前讲解过的ReentrantLock源码解析和Semaphore源码解析,这两章介绍了很多方法都是本章的铺垫.下面 ...

  9. [源码解析] TensorFlow 分布式 DistributedStrategy 之基础篇

    [源码解析] TensorFlow 分布式 DistributedStrategy 之基础篇 目录 [源码解析] TensorFlow 分布式 DistributedStrategy 之基础篇 1. ...

随机推荐

  1. 操作redis数据库 & 操作Excel & 开发接口

    操作redis数据库: string类型 1. 增 set,传俩个参数 key value(只要是字符串就行)2. 删 delete 传一个参数 key3. 修改 set 在目标key重新传参 key ...

  2. vijos搭建踩坑

    nodejs我用的8.x版本,可以工作. 和制作组交谈之后他们说最好榨汁机和主机不要在同一系统下. vj4/vj4/handler/base.py的第343行 从 super(Connection, ...

  3. Rectangular Covering [POJ2836] [状压DP]

    题意 平面上有 n (2 ≤ n ≤ 15) 个点,现用平行于坐标轴的矩形去覆盖所有点,每个矩形至少盖两个点,矩形面积不可为0,求这些矩形的最小面积. Input The input consists ...

  4. python 基本认证

    # import requests # # response = requests.get('http://127.0.0.1:8080/manager/html', auth=('tomcat', ...

  5. centos7安装可视化界面

    使用VMWare安装好centos7镜像后开始安装centos桌面. 一.输入命令 yum groupinstall "GNOME Desktop" "Graphical ...

  6. DataRow[]

    datarow[]是datatable 的行数组集合,但是呢好像是不能直接初始化,只能是datarow[] rows = dt.select(condition);这样子.(也可能我才疏学浅没找到吧) ...

  7. 04.封装ajax

    <script> //封装ajax // 函数名 ajax // 函数的参数 // url: 请求的地址 // type: 请求的方式 get /post // data: 要上传的数据 ...

  8. scala Weak Conformance

    Weak Conformance In some situations Scala uses a more general conformance relation. A type S weakly ...

  9. Ajax验证用户名是否被注册

    Ajax验证用户名是否被注册 var xmlHttp; function createXMLHttpRequest(){ // 创建XMLHttp请求对象 if(window.ActiveXObjec ...

  10. 电子科技大学第九届ACM趣味程序设计竞赛(热身赛)题解

    比赛地址:http://acm.uestc.edu.cn/#/contest/show/191 A题 小羽涂色 题意: 在x轴的正半轴上,问你是否存在一段区间[L,R]其中包含r个奇数和g个偶数. 分 ...