如何动手实现并欣赏localcache领域的优秀开源设计方案?

2026-05-29 08:563阅读0评论SEO资源
  • 内容介绍
  • 文章标签
  • 相关推荐

本文共计1879个文字,预计阅读时间需要8分钟。

如何动手实现并欣赏localcache领域的优秀开源设计方案?

前言,哈喽,大家好,我是asong。

上篇文章:动手实现一个localcache+设计篇,介绍了设计一个本地缓存要考虑的点,有读者朋友反馈可以借鉴bigcache的存储设计,可以减少GC压力。


前言

哈喽,大家好,我是​​asong​​​。上篇文章:动手实现一个localcache - 设计篇 介绍了设计一个本地缓存要思考的点,有读者朋友反馈可以借鉴bigcache的存储设计,可以减少GC压力,这个是我之前没有考虑到的,这种开源的优秀设计值得我们学习,所以在动手之前我阅读了几个优质的本地缓存库,总结了一下各个开源库的优秀设计,本文我们就一起来看一下。

如何动手实现并欣赏localcache领域的优秀开源设计方案?

高效的并发访问

本地缓存的简单实现可以使用​​map[string]interface{}​​​ + ​​sync.RWMutex​​​的组合,使用​​sync.RWMutex​​​对读进行了优化,但是当并发量上来以后,还是变成了串行读,等待锁的​​goroutine​​​就会​​block​​​住。为了解决这个问题我们可以进行分桶,每个桶使用一把锁,减少竞争。分桶也可以理解为分片,每一个缓存对象都根据他的​​key​​​做​​hash(key)​​​,然后在进行分片:​​hash(key)%N​​,N就是要分片的数量;理想情况下,每个请求都平均落在各自分片上,基本无锁竞争。

阅读全文
标签:开源

本文共计1879个文字,预计阅读时间需要8分钟。

如何动手实现并欣赏localcache领域的优秀开源设计方案?

前言,哈喽,大家好,我是asong。

上篇文章:动手实现一个localcache+设计篇,介绍了设计一个本地缓存要考虑的点,有读者朋友反馈可以借鉴bigcache的存储设计,可以减少GC压力。


前言

哈喽,大家好,我是​​asong​​​。上篇文章:动手实现一个localcache - 设计篇 介绍了设计一个本地缓存要思考的点,有读者朋友反馈可以借鉴bigcache的存储设计,可以减少GC压力,这个是我之前没有考虑到的,这种开源的优秀设计值得我们学习,所以在动手之前我阅读了几个优质的本地缓存库,总结了一下各个开源库的优秀设计,本文我们就一起来看一下。

如何动手实现并欣赏localcache领域的优秀开源设计方案?

高效的并发访问

本地缓存的简单实现可以使用​​map[string]interface{}​​​ + ​​sync.RWMutex​​​的组合,使用​​sync.RWMutex​​​对读进行了优化,但是当并发量上来以后,还是变成了串行读,等待锁的​​goroutine​​​就会​​block​​​住。为了解决这个问题我们可以进行分桶,每个桶使用一把锁,减少竞争。分桶也可以理解为分片,每一个缓存对象都根据他的​​key​​​做​​hash(key)​​​,然后在进行分片:​​hash(key)%N​​,N就是要分片的数量;理想情况下,每个请求都平均落在各自分片上,基本无锁竞争。

阅读全文
标签:开源