内存缓存-go

Best博客 · · 2561 次点击 · · 开始浏览    
这是一个创建于 的文章,其中的信息可能已经有所发展或是发生改变。

GO

内存缓存

  • CPU 有缓存:L1,L2,L3 不同等级缓存执行速度不一样,空间也不一样。
  • 内存缓存:有栈有堆,栈速度要快很多,但一般用来存储小对象以及作用域函数内,堆大用于大对象以及全局对象等,但堆需要GC回收(三色标记法),存在stop the word
  • 磁盘缓存:空间大,读取慢。

程序

很多时候我们为了缩短单次请求的时间,就需要去分析请求在哪一步耗时比较大,一般越靠近应用层优化效果越大,后端程序就是请求到达路由解析到返回结果这一步骤了。
1.直接读mysql,这一般是后台管理员的增删改查了
2.直接读redis,redis到是方便各节点访问以及一定操作,但毕竟存在网络io
3.直接从本地内存中读数据,使用前你需要精准判断需要分配多大内存空间来充当本地内存缓存,为了更好的使用这有限的本地缓存,对它进行一定管理十分必要,可以参考redis的,过期时间,lru,lfu,fifo等等

开源工具

go get -u github.com/bluele/gcache,这个开源库提供分装好了的lru,lfu算法,你可以直接使用,也有过期时间的分装,以及使用内存大小。

https://github.com/hashicorp/golang-lru 也是一个lru的分装

golang的标准库里面也有对双向链表的分装


image.png

话说回来

其实golang提供的数据类型就就能满足我们很多场景了,小场面压根可以原生直接上。。。

总结

lru,lfu,fifo 等内存缓存淘汰法则各自优略你需要心领神会,这样在特定场合你才能更好的对他们进行一定的取舍,甚至是定制自己的改造。

参考文献

https://blog.csdn.net/liuyonglun/article/details/103772802
https://studygolang.com/pkgdoc
https://github.com/bluele/gcache


有疑问加站长微信联系(非本文作者)

本文来自:简书

感谢作者:Best博客

查看原文:内存缓存-go

入群交流(和以上内容无关):加入Go大咖交流群,或添加微信:liuxiaoyan-s 备注:入群;或加QQ群:692541889

2561 次点击  ∙  1 赞  
加入收藏 微博
暂无回复
添加一条新回复 (您需要 登录 后才能回复 没有账号 ?)
  • 请尽量让自己的回复能够对别人有帮助
  • 支持 Markdown 格式, **粗体**、~~删除线~~、`单行代码`
  • 支持 @ 本站用户;支持表情(输入 : 提示),见 Emoji cheat sheet
  • 图片支持拖拽、截图粘贴等方式上传