前言
今天发现了一个很好的学习IT知识的网站(也有APP),名字叫掘金,我预测这个APP应该会火,里面收集了大量的好的IT技术博 客,含金量都比较高,也给大家推荐一下,有 兴趣的同学可以去网站看看,真的不错哟!
介绍
好了言归正传了,今天在一个blog中看到了关于后端开发缓存的介绍觉得讲的还不错,自己就想着也写一篇,记录下自己的心 得。 首先得要知道什么是缓存,缓存其实就是一 个临时存储数据的地方。做后台开发性能最重要了,如果用户每次访问一个页 面花 个几秒钟,那不是要炸?随后缓存也就应运而生,缓存的出现极大的改善了产品的性能,使 得用户的访问效率更高了。
缓存的类型
- 数据库型缓存: 数据库型缓存就是将数据存储在非关系型数据库中,非关系型数据库中用key-value的形式存储数据,这样就可以大大加快访问效率。
- 文件型缓存:数据库型缓存要远程访问数据库速度还是慢了点,文件型数据库就是将数据临时存放到本地文件,访问本地文件速度比远程数据库肯定要快,所以这个文件就是一个缓存。
- 内存型缓存:在进一步,访问文件还是有点慢,那么我们可以把一些热数据直接放到内存中,这样访问内存的速度比文件又更快了。
那么如何设计一个缓存呢?
- 底层数据结构:在计算机中几乎所有的轮子都要考虑数据结构,而且底层数据结构设计的好坏直接影响系统运行的效率。对于缓存来说,一般都是key-value的形式,所以底层一般用树或者哈希表来存储数据,缓存对性能的要求比较高,所以一般使用哈希表来保存数据。
- 内存管理:因为有写操作,所以需要申请内存,如果写的操作比较多的话再加上一些读的操作,那么就会不停的申请释放资源,这时就会影响性能,所以一般会使用内存连接池来使用。
- 网络模型:对于网络模型,实际上现代的高级语言已经基本上封装到http这个层次了,比如golang这种现代语言,http的包都可以直接用,并且并发性能也挺好的,但是对于一个缓存系统,如果配合一个http的模型,就显得太重了,http底下的TCP模型就可以很好的解决问题,对于这一块,我们可以用个简单的模型:根据CPU的核心数启动相应数量的协程,每个协程配合一个channel,启动一个协程负责接收tcp连接,accpet链接以后通过channel交给相应的协程处理。