golang本地缓存选型及原理总结

简介: golang本地缓存选型及原理总结

golang本地缓存选型及原理总结



一、本地缓存需求


  1. 需要较高读写性能+命中率
  2. 支持按写入时间过期
  3. 支持淘汰策略
  4. 需要解决gc问题,否则大量对象写入会引起stw扫描标记时间过长,cpu毛刺严重


二、本地缓存调研


  1. freecache:https://github.com/coocood/freecache
  2. bigcache:https://github.com/allegro/bigcache
  3. fastcache:https://github.com/VictoriaMetrics/fastcache


  1. 本地缓存最终都会受单机内存容量的限制
  2. 平均响应时间在ms级
  3. 绝大部分此类组件都是基于分片+读写锁来实现功能,底层数据要么采用淘汰算法淘汰数据,要么采用循环队列循环使用空间。


特别注明:


  • 实现零GC方案
  • 无GC:分配堆外内存(Mmap)
  • 避免GC:
  1. map非指针优化(map[uint64]uint32)或者采用slice实现一套无指针的map
  2. 数据存入[]byte slice(可考虑底层采用环形队列封装循环使用空间)
  • 实现高并发思路
  • 数据分片(降低锁的粒度)


三、本地缓存之freecache


640.png


四、本地缓存之bigcache


640.png


五、本地缓存之fastcache

640.png


六、总结


  1. 存储是互联网的基石、核心命脉。有必要详细了解
  2. 工作日常会接触:存储方案选型、性能调优等。应该了解、熟悉
相关文章
|
6月前
|
XML 存储 缓存
【深入浅出Spring原理及实战】「缓存Cache开发系列」带你深入分析Spring所提供的缓存Cache管理器的实战开发指南(修正篇)
【深入浅出Spring原理及实战】「缓存Cache开发系列」带你深入分析Spring所提供的缓存Cache管理器的实战开发指南(修正篇)
111 0
|
13天前
|
存储 安全 测试技术
GoLang协程Goroutiney原理与GMP模型详解
本文详细介绍了Go语言中的Goroutine及其背后的GMP模型。Goroutine是Go语言中的一种轻量级线程,由Go运行时管理,支持高效的并发编程。文章讲解了Goroutine的创建、调度、上下文切换和栈管理等核心机制,并通过示例代码展示了如何使用Goroutine。GMP模型(Goroutine、Processor、Machine)是Go运行时调度Goroutine的基础,通过合理的调度策略,实现了高并发和高性能的程序执行。
75 29
|
11天前
|
负载均衡 算法 Go
GoLang协程Goroutiney原理与GMP模型详解
【11月更文挑战第4天】Goroutine 是 Go 语言中的轻量级线程,由 Go 运行时管理,创建和销毁开销小,适合高并发场景。其调度采用非抢占式和协作式多任务处理结合的方式。GMP 模型包括 G(Goroutine)、M(系统线程)和 P(逻辑处理器),通过工作窃取算法实现负载均衡,确保高效利用系统资源。
|
3月前
|
算法 NoSQL 关系型数据库
熔断原理与实现Golang版
熔断原理与实现Golang版
|
3月前
|
存储 关系型数据库 Go
SOLID原理:用Golang的例子来解释
SOLID原理:用Golang的例子来解释
|
3月前
|
存储 缓存 算法
缓存优化利器:5分钟实现 LRU Cache,从原理到代码!
嗨,大家好!我是你们的技术小伙伴——小米。今天带大家深入了解并手写一个实用的LRU Cache(最近最少使用缓存)。LRU Cache是一种高效的数据淘汰策略,在内存有限的情况下特别有用。本文将从原理讲起,带你一步步用Java实现一个简单的LRU Cache,并探讨其在真实场景中的应用与优化方案,如线程安全、缓存持久化等。无论你是初学者还是有一定经验的开发者,都能从中受益。让我们一起动手,探索LRU Cache的魅力吧!别忘了点赞、转发和收藏哦~
74 2
|
3月前
|
缓存 监控 网络协议
DNS缓存中毒原理
【8月更文挑战第17天】
95 1
|
3月前
|
存储 缓存 NoSQL
微服务缓存原理与最佳实践
微服务缓存原理与最佳实践
|
3月前
|
存储 人工智能 Go
golang 反射基本原理及用法
golang 反射基本原理及用法
28 0

热门文章

最新文章