Closed FishGoddess closed 3 years ago
基于工作的使用之后,我产生了一些想法,并准备把这些想法都实现,加入到 v0.2.x 版本当中
// 改进前 cache := cachego.NewCache() cache.AutoGC(10*time.Minute) // 改进后: cache := cachego.NewCache(cachego.WithAutoGC(10*time.Minute))
性能优化 - 引入 value 实例池 ( P1 ) 目前在 segment 中每次添加数据都会创建一个 value 实例,当缓存过期时间比较短时,就会比较经常缓存未命中,从而导致新数据不断被添加到缓存,value 实例也会被不断创建并“抛弃”。 当有大量访问的时候,这种情况还会加剧,并在短时间内创建大量的 value 实例,加大 GC 的压力,所以准备引入 value 实例池,对 value 实例进行复用,减少实例的创建。 暂时考虑使用 sync.Pool 来实现,并在 segment 层面进行改进。
增加 debug 网络调试点 ( P1 ) 在工作开发时经常需要对缓存数据进行查询,比如使用 redis 做缓存,一般会通过 redis-cli 查下缓存数据有没有问题,是否命中缓存之类的,而进程内缓存就没办法做到这点。 我们打算加入一个用于 debug 的 http 服务,提供一些查询缓存内数据的功能,并可以选择是否开启该服务。 为了方便 curl 请求,接口可以进行简化或者使用 rest 语义化。
目前暂时只有这些想法,后续 0.2.x 版本的新想法和进展都将在这个 issue 中更新,敬请期待!
done
性能优化 - 引入 value 实例池 ( P1 ) 目前在 segment 中每次添加数据都会创建一个 value 实例,当缓存过期时间比较短时,就会比较经常缓存未命中,从而导致新数据不断被添加到缓存,value 实例也会被不断创建并“抛弃”。 当有大量访问的时候,这种情况还会加剧,并在短时间内创建大量的 value 实例,加大 GC 的压力,所以准备引入 value 实例池,对 value 实例进行复用,减少实例的创建。 暂时考虑使用 sync.Pool 来实现,并在 segment 层面进行改进。
增加 debug 网络调试点 ( P1 ) 在工作开发时经常需要对缓存数据进行查询,比如使用 redis 做缓存,一般会通过 redis-cli 查下缓存数据有没有问题,是否命中缓存之类的,而进程内缓存就没办法做到这点。 我们打算加入一个用于 debug 的 http 服务,提供一些查询缓存内数据的功能,并可以选择是否开启该服务。 为了方便 curl 请求,接口可以进行简化或者使用 rest 语义化。
目前暂时只有这些想法,后续 0.2.x 版本的新想法和进展都将在这个 issue 中更新,敬请期待!