golang 的channel无缓存和有缓存的区别
我们一般做缓存就是为了能提高系统的读写性能,缓存的命中率越高,也就意味着缓存的效果越好。fastcache 一方面充分利用了分片来降低锁的粒度,另一方面在索引存储时采用了对 map 的优化,同时在分配内存时,直接从堆外申请内存,自己实现了分配和释放内存的逻辑。此外二者均无法支持数据的过期和淘汰,同时在存储大量数据时,又会产生比较频繁的 GC 问题,更严重的情况下导致线上服务无法稳定运行。同时 bigcache 中数据的过期是通过全局的时间窗口维护的,每个单独的 kv 无法设置不同的过期时间。