golang本地缓存选型及原理总结
一、本地缓存需求
-
需要较高读写性能+命中率 -
支持按写入时间过期 -
支持淘汰策略 -
需要解决gc问题,否则大量对象写入会引起stw扫描标记时间过长,cpu毛刺严重
二、本地缓存调研
-
freecache:https://github.com/coocood/freecache -
bigcache:https://github.com/allegro/bigcache -
fastcache:https://github.com/VictoriaMetrics/fastcache

-
本地缓存最终都会受单机内存容量的限制 -
平均响应时间在ms级 -
绝大部分此类组件都是基于分片+读写锁来实现功能,底层数据要么采用淘汰算法淘汰数据,要么采用循环队列循环使用空间。
特别注明:
-
实现零GC方案
-
无GC:分配堆外内存(Mmap) -
避免GC: -
map非指针优化(map[uint64]uint32)或者采用slice实现一套无指针的map -
数据存入[]byte slice(可考虑底层采用环形队列封装循环使用空间) -
实现高并发思路
-
数据分片(降低锁的粒度)
三、本地缓存之freecache
四、本地缓存之bigcache
五、本地缓存之fastcache
六、总结
-
存储是互联网的基石、核心命脉。有必要详细了解 -
工作日常会接触:存储方案选型、性能调优等。应该了解、熟悉
原文始发于微信公众号(堆栈future):golang本地缓存选型及原理总结
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
文章由极客之音整理,本文链接:https://www.bmabk.com/index.php/post/103457.html