bigcache
<h4>Shards、HardMaxCacheSize</h4>
<p>shards,即分片数量,决定 hash 后落到的桶数量</p>
<p>HardMaxCacheSize 大小决定每个分片的存储数组,最终能扩展到多大</p>
<p><br></p>
<h4>LifeWindow 和 CleanWindow</h4>
<p>LifeWindow 是全局的,决定了每次 set 之后多久过期,所以在存储数组中,数据总是按以下顺序排序:</p>
<p>|过期时间10s | 过期时间10s| 过期时间11s | 过期时间12s | 过期时间13s | 过期时间14s | 过期时间15s | </p>
<p>CleanWindow 是定时扫描时间</p>
<p>值得注意的是,如果某个 key 超过了 LifeWindow,但是还没到定时扫描的时间 CleanWindow,这时候不会失效</p>
<p>扫描是会加锁的,从最前一个往后扫,第一个都不过期,后面的肯定也不过期</p>
<p>最坏的情况是所有 key 刚好同一时间 set进去, 于是同一时间过期,这时候要扫描 n 次 (n是过期 key 的数量)</p>
<p><br></p>
<h3>set 过程</h3>
<p>分片 => map[key]索引 => 索引指向真正的存储数组(字节数组)</p>
<p>如果 set 的时候发现满了,但是单个shard 容量还没超过 HardMaxCacheSize, 扩容,然后加入</p>
<p>如果 set 的时候满了,并且超过 HardMaxCacheSize,则淘汰最前面的 key(不管是不是hotkey),淘汰 1- n 次直到容量达到要求。</p>
<p>set 过程会检查 hash 冲突,冲突的时候清掉旧值,保留后插入的</p>
<p>set 的过程会检查过期,只检查第一个</p>
<p><br></p>
<h4>get 过程</h4>
<p>分片 => map[key]索引 => 索引指向真正的存储数组(字节数组)</p>
<p>到期不会主动失效,还是能拿到,具体失效时间以定时主动扫描为主, 扫描到过期,也只是设置一个 delete状态, get 的时候判断,并不会真正清理数据</p>
<p><br></p>
<h4>其他参数说明</h4>
<ul>
<li>待补充</li>
</ul>
<p><br></p>
<h4>其他要点说明</h4>
<ul>
<li>待补充</li>
</ul>