FishGoddess/cachego

关于 v0.2.x 版本的一些构思

Closed this issue · 1 comments

基于工作的使用之后,我产生了一些想法,并准备把这些想法都实现,加入到 v0.2.x 版本当中

  1. 创建缓存实例的方式需要改进 ( P0 )
    目前创建缓存实例的 NewCache 方法没有带任何的参数,没办法在创建阶段做配置,而在实际的工作当中比较常在全局的 var 代码块中创建缓存实例,如果要进行配置(比如打开自动 GC 的功能),只能在 init 方法中创建并配置。
    个人觉得这种方式有些不方便,所以需要做改进,在创建阶段就可以进行配置,也就是 NewCache 方法返回的需要是配置好并直接能用的缓存实例。
    目前打算使用 option function 的方式去搞,比如打开自动 GC 的功能就是一个创建的 option function,演示如下:
// 改进前
cache := cachego.NewCache()
cache.AutoGC(10*time.Minute)

// 改进后:
cache := cachego.NewCache(cachego.WithAutoGC(10*time.Minute))
  1. 性能优化 - 引入 value 实例池 ( P1 )
    目前在 segment 中每次添加数据都会创建一个 value 实例,当缓存过期时间比较短时,就会比较经常缓存未命中,从而导致新数据不断被添加到缓存,value 实例也会被不断创建并“抛弃”。
    当有大量访问的时候,这种情况还会加剧,并在短时间内创建大量的 value 实例,加大 GC 的压力,所以准备引入 value 实例池,对 value 实例进行复用,减少实例的创建。
    暂时考虑使用 sync.Pool 来实现,并在 segment 层面进行改进。

  2. 增加 debug 网络调试点 ( P1 )
    在工作开发时经常需要对缓存数据进行查询,比如使用 redis 做缓存,一般会通过 redis-cli 查下缓存数据有没有问题,是否命中缓存之类的,而进程内缓存就没办法做到这点。
    我们打算加入一个用于 debug 的 http 服务,提供一些查询缓存内数据的功能,并可以选择是否开启该服务。
    为了方便 curl 请求,接口可以进行简化或者使用 rest 语义化。

目前暂时只有这些想法,后续 0.2.x 版本的新想法和进展都将在这个 issue 中更新,敬请期待!

done