【go项目-geecache】动手写分布式缓存 - day1 - 实现LRU算法
【go项目-geecache】动手写分布式缓存 - day2 - 单机并发缓存
【go项目-geecache】动手写分布式缓存 - day3 - HTTP 服务端
【go项目-geecache】动手写分布式缓存 - day4 - 一致性哈希(hash)
【go项目-geecache】动手写分布式缓存 - day5 - 分布式节点
【go项目-geecache】动手写分布式缓存 - day6 - 防止缓存击穿
【go项目-geecache】动手写分布式缓存 - day7 - 使用 Protobuf 通信

一 :实现LRU算法

做了什么?

这里我们定义了数据结构 Cache 包含一个双向链表和map,map表示真正的缓存,双向链表表示最近的缓存使用情况,然后定义一个entry,用来淘汰双向链表队首,根据key删除map数据

我的收获:

  • 学会了接口类型转化 A. (type),意思时把A接口转换成type类型
  • 学会了go的单元测试
  • 回调函数的定义

二 :单机并发缓存

做了什么?

  • 定义了数据结构ByteView用来表示缓存值,里面使用byte可以表示任意数据类型如图片
  • 定义cache封装lru.Cache,包括一个Mutex锁,Cache缓存主体,缓存大小,目的是添加了并发机制
  • 封装增删的方法,添加并发
  • 定义接口 Getter 和 回调函数 Get(key string)([]byte, error),用来在缓存不存在时,从外界获取数据
  • 定义数据结构Group封装了cache,目的是负责与用户的交互,并且控制缓存值存储和获取的流程,里面包含name,表示缓存空间命名,主体cache,和回调函数getter
  • 实现Group的Get,new方法

我的收获:

  • 学会并发控制,锁的应用
  • 接口型函数的应用场景
  • 数据结构之间的封装
  • defer的用法

三 :HTTP服务端

做了什么?

  • 定义 HTTPPool ,作为HTTP通信的主要数据结构,包括self自己名字和basepath前缀名字
  • 实现了Log记录日志,ServerHTTP,先判断是不是合法通信格式,然后完成服务端功能即是缓存找不到时,从外界获取数据

我的收获:

  1. 了解了HTTP通信

四 :一致性哈希

做了什么?

  • 定义数据结构Map实现一致性哈希算法,包含哈希函数,虚拟节点倍数 replicas(为了进一步提高系统的可靠性和负载均衡,可以将每个物理节点映射到多个虚拟节点),哈希环key(存下所有key),映射表 hashMap
  • 实现增删接口

我的收获:

  1. 如何实现一致性哈希
  2. 哈希函数的设置
  3. 虚拟节点的作用

五 :分布式节点

做了什么?

  • 抽象PeerPicker接口,目的是实现节点选择功能,实现Get方法,首先把URL组合起来,HTTP连接,如果返回HTTP状态码200表示正常,然乎读取返回
  • 为HTTPPool 添加节点选择,添加peers为一致性哈希算法的map,httpGetters为 map表示远程对应的节点。
  • 实现 PeerPicker 接口,Set()和PickPeer()
  • 集成在主流程

我的收获:

  1. 加深了锁的使用,涉及修改就要用
  2. 时刻要考虑不安全的情况

六:防止缓存击穿

做了什么?

  • 创建call表示正在进行或已经结束的请求,包括一个sync.WaitGroup(等待组),空接口val,创建Group,管理不同的key请求,包括互斥锁,map表示不同请求的状态
  • 实现DO方法,保证对于每一个请求只会执行一次函数
  • 在Group加入singleflight

收获

  • 空接口和匿名函数的使用
  • 缓存击穿/崩溃/穿透的概念
  • 如何防止缓存击穿

七 :Protobuf 通信

做了什么?

  • 定义.proto文件,包括基本的信息结构,还有一个RPC方法名,它接受一个类型为 “Request” 的参数,并返回一个类型为 “Response” 的响应。
  • 利用protoc --go_out=. *.proto自动生成geecachepb.pb.go
  • 修改PeerGetter ,该改为使用 geecachepb.pb.go 中的数据类型
  • 修改group.go所有使用了 PeerGetter 接口的地方

收获

  1. 加深了对HTTP通信的理解
  2. 了解了Protobuf通信

go-geecache 总结和收获相关推荐

  1. 【go项目-geecache】动手写分布式缓存 - day7 - 使用 Protobuf 通信

    索引 [go项目-geecache]动手写分布式缓存 - day1 - 实现LRU算法 [go项目-geecache]动手写分布式缓存 - day2 - 单机并发缓存 [go项目-geecache]动 ...

  2. 两个月番茄组长的收获总结

    一路走来,成长很多... 1.第一个月 来的时候,正巧是番茄1.2.5发布,熟悉了晓鸿的代码,觉得只要负责好自己的那部分就可以了,一直没有融入到大家的开发中.番茄开始PC端2.0的开发,本以为是从新的 ...

  3. github javaguide_GitHub上收获Star数排名前10的Java项目

    1. CS-Notes star:92.1k 介绍:技术面试必备基础知识.Leetcode.计算机操作系统.计算机网络.系统设计.Java.Python.C++ :地址:https://cyc2018 ...

  4. c# 数据可视化_#OpenVisConf上的22位数据可视化从业者的10点收获

    c# 数据可视化 by Siena Duplan 通过锡耶纳·杜普兰(Siena Duplan) #OpenVisConf上的22位数据可视化从业者的10点收获 (10 Takeaways from ...

  5. 项目开发过程中的收获与思考

    2013年7月,我正式毕业了,到公司入职,也就正式成为了一名菜鸟程序员.到今天,2014年1月3日,目前主要的工作是公司一个项目中的一个功能模块,到我进入项目组算起,已经过了四个月了.因此,想写点东西 ...

  6. win32的一个售票程序,收获有非常的多

    先秀一下我的收获吧! 1.在创建非模态对话框的时,需要用到createdialog函数,第二个参数需要注意是填写对话框的资源标识符(id),之后需要调用showwindow来显示对话框:或者不这么做也 ...

  7. GitHub超全机器学习工程师成长路线图,开源两日收获3700+Star!

    参加 2019 Python开发者日,请扫码咨询 ↑↑↑ 大会议题以及更多详情请查看:https://pythondevdays2019.csdn.net/ 作者 | 琥珀 出品 | AI科技大本营( ...

  8. 集合70多种推荐算法,东北大学老师用Java写了一个开源库,在GitHub上收获近1500个Star...

     [AI科技大本营导读]在经过一年多的开发工作之后,LibRec 3.0 版本终于发布了.LibRec 是一个基于 Java 的开源算法工具库,覆盖了 70 余个各类型推荐算法,可以有效解决评分预测 ...

  9. 霸榜多个CV任务,开源仅两天,微软分层ViT模型收获近2k star

    视学算法报道 转载自:机器之心 编辑:维度 屠榜各大 CV 任务的微软 Swin Transformer,近日开源了代码和预训练模型. 自 2017 年 6 月谷歌提出 Transformer 以来, ...

最新文章

  1. np.random.permutation
  2. MVC中注册路由及其路由的设置
  3. 【uni-app】uParse 富文本解析插件遇到长图、大图宽高比异常问题
  4. python怎么部署到tomcat_使用python将war部署到tomcat
  5. 光电编码器的原理及应用场合_旋转式光电编码器工作原理及在视觉检测中的使用...
  6. 2017.9.21 所驼门王的宝藏 思考记录
  7. linux第五单元作业,第五单元《微型计算机系统》教案
  8. 机器学习入门:隐马尔科夫模型-8
  9. 源泉书签支持批量删除功能啦
  10. SXF python
  11. 000webhost – 1500M支持PHP可绑米免费虚拟主机
  12. MICCAI2019论文分享 PART①
  13. 基于网络特征的新型授权机制设想
  14. VulnHub-01 - Empire Lupin One打靶记录
  15. 服务器和客户端连接不稳定,服务器和客户端的连接方法
  16. 五绝------送卢兄之某传xiao之都
  17. Qt5.14_MinGW/MSVC下实现VS2019面板自由拖拽组合功能
  18. Java-类的方法练习--实现客户姓名的添加、显示及查询
  19. 某生存游戏玩家属性值分析
  20. HP MediaSmart HP Home Server的功耗

热门文章

  1. sublime text3插件使用
  2. UE4 Engine Fix-找回4.24后失去的Matinee
  3. “一路向南,dream it possible”之旅--骑行从北京到成都(二)
  4. n9006 android6,三星N9006怎么用 三星N9006使用方法【详解】
  5. go work 工作区
  6. 软考(软件设计师)考点总结 --法律法规与知识产权
  7. cesium 加载geojson 贴3dtiles
  8. C++ bitset的使用
  9. matlab画图线型、符号、颜色
  10. FPGA error:buffers of the same direction cannot be placed in series.