- 缓存实现热身
- 持久化功能简单实现
- 锁粒度细化
- 异步技术引入
- 缓存服务集群化
- 缓存淘汰和过期机制
- 缓存性能测试
- 自定义网络通信协议
- 分布式技术引入
- 客户端集群化
本课程聚焦 Go 语言实现分布式缓存,我们会使用 Go 语言的内置库完成一个单机版的缓存服务,后面会基于这个单机版的缓存服务来升级改造,逐步迭代成为一个分布式的缓存服务。
假设这样一个问题:一个程序有 1TB 的数据都存在硬盘上,但其中只有 1GB 的数据会被频繁地读取,假设硬盘的读取速度是 100MB/s,那么每一次读取都会消耗 10 秒,有没有什么办法可以提高读取的速度?
很明显,这个问题是由于硬盘的速度太慢了,导致读取时间太久,而且只是其中 1GB 数据会被频繁地读取,那我们能不能把这 1GB 的数据存到一个速度更快的地方,比如存到内存中,假设内存速度是 10GB/s,那么每一次读取这 1GB 的数据就只需要 0.1 秒。可能有人会说,那为什么不把全部数据都存到内存中呢?当然可以,只要你有足够大的内存,但是内存的价格要比硬盘高不少,整个程序的花费就会非常大,而且其他数据存进内存的意义不大。
如果要给这里的“内存”起一个名字,就可以叫它“缓存”了。我们不用去纠结缓存的概念是什么,更重要的是它解决了什么问题。
还是从上面的问题入手,我们可以提取出两个关键点:频繁,速度。
这两个关键点意味着缓存中的数据往往是会被反复读取的,因为经常要读取,所以要提高读取的速度。另外,由于数据本身是存在硬盘上的,所以不管缓存中有没有这些数据,程序都应该是正常运行的,当缓存中没有数据的时候,需要去硬盘中读取。如果程序修改了硬盘上的数据,缓存中的数据就没有用了,属于过时的数据,所以还需要去更新缓存。
所以,我们可以总结出缓存的特点:
本课程聚焦 Go 语言实现分布式缓存,我们会使用 Go 语言的内置库完成一个单机版的缓存服务,后面会基于这个单机版的缓存服务来升级改造,逐步迭代成为一个分布式的缓存服务。
训练营实验我全做了一遍,文档写的非常棒,做实验过程中作者同学一直在我身边的感觉,实在是很有趣,这种感觉妙不可言。代码质量也挺高的,我觉得学习本训练营有难度的同学做一遍肯定是不够的,至少做个三遍才能掌握本本训练的核心知识点,训练营中对有些概念给了相应搜索提示,不理解的按提示及时搜索搞明白,有必要拿起本子写笔记搞懂。
感谢支持!
恩
今天不努力,明天捡垃圾
今天不努力,明天捡垃圾