0%

fastcache

特性:

  • 快速, 高性能, 多 CPU上 可扩展
  • 线程安全. 多个 goroutine 可以同时读写一个cache 实例
  • fastcache 设计为 在存储大量的 entry 的场景下 GC free
  • fastcache 当 缓存数量达到阈值时 可以自动 清理 old entry
  • 简单的API
  • 简单的源代码
  • cacheData 可以 保存到文件(从文件中加载)
  • Google App Engine 上工作
阅读全文 »

golang 包引用之间不允许循环依赖.
循环依赖的本质上是一个错误的设计, 在 golang中 循环依赖是 会产生编译时错误.

dependency-cycle

golang中为什么不允许循环依赖呢?

1. 没有支持循环导入,目的是迫使 Go 程序员更多地考虑程序的依赖关系.
  - 保持依赖关系图的简洁。
  - 快速的程序构建。
2. 如果支持循环导入,很容易会造成懒惰、不良的依赖性管理和缓慢的构建。这是设计者不希望看见的。
  - 混乱的依赖关系。
  - 缓慢的程序构建

golang中的循环依赖对编译的性能 和 程序的依赖关系的清晰非常不利, 所以在程序设计上,要保持 干净的 DAG.

阅读全文 »

golang的单测, 有一些约定, 例如文件名是 xxx.go, 测试文件名必须是 xxx_test.go, 且测试函数的方法名 都是以 Test开头, 使用go test 命令, 有时发现mock不住,一般都是内联(简短)函数mock失败,可以执行的时候加上编译条件禁止内联 -gcflags=all=-l.

阅读全文 »

写出可测试 的代码 至关重要. 可以保证代码的稳定性. 帮助程序员减少bug.

gomock 是一个go官方的模拟框架.
gomock的使用场景:

  • IO类型的数据, 本地文件,数据库,网络API,RPC等
  • 依赖的服务还没有开发好, 这时候可以自己模拟一个服务, 加快开发进度提升开发效率
  • 压力性能测试的时候屏蔽外部依赖, 专注测试本模块
  • 依赖的内部函数非常复杂, 要构造数据非常不方便,这也是一种

gomock

阅读全文 »

代码仓库地址

freeCache 相比较 golang 的原生map实现缓存,可以通过减少指针的数量避免 GC压力,无论存储了多少数据,内部只会占用 512个指针,
数据集 通过 hash(key) 被分片256个 segment,每个 segment 有两个指针,

  • 一个存储键和值的唤醒缓冲区
  • 另一个是用于查找索引条目的索引切片
    每个 segment 都有自己的 sync.Mutex,所以支持多线程访问.
阅读全文 »

[TOC]

Bigcache 的特点:

并发支持,快速, 过期大量条目而不影响性能.
bigcache将 缓存条目放在了堆上,节省了GC. 为了实现这一点. 需要对字节切片进行操作. 因此涉及到缓存条目的序列化与反序列化.

bigcache, freecache 和 map 的基准测试

阅读全文 »