点开工具、字典、anything


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>分片 =&gt; map[key]索引 =&gt; 索引指向真正的存储数组(字节数组)</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>分片 =&gt; map[key]索引 =&gt; 索引指向真正的存储数组(字节数组)</p> <p>到期不会主动失效,还是能拿到,具体失效时间以定时主动扫描为主, 扫描到过期,也只是设置一个 delete状态, get 的时候判断,并不会真正清理数据</p> <p><br></p> <h4>其他参数说明</h4> <ul> <li>待补充</li> </ul> <p><br></p> <h4>其他要点说明</h4> <ul> <li>待补充</li> </ul>

页面列表

ITEM_HTML