易发卡

复杂的 LFU 缓存执行 O(1) 如本文件所述,所有交易 K. Shah、A. Mitra和D. Matani的“执行LFU缓存驱逐计划的O(1)算法”
创建此库的动机是什么( 外部其他 LFU 缓存库的情况) ?
- 最重要的是字迹支持
- 执行
O(1)对所有交易( 尽管我为它创建了算法 ) - 可维护代码
如果你想偷看源代码,我建议你先阅读上面提到的纸张中的算法,然后研究代码,以便更好的理解或建议.
安装
i@akashbabu/lfu-cache - S
示例
import LFUCache from '@akashbabu/lfu-cache';
const lfu = new LFUCache<string>();
lfu.set('foo', 'bar');
console.log(lfu.size) // => 1
console.log(lfu.get('foo')) // => bar
console.log(lfu.peek('foo')) // => bar
lfu.delete('foo')
console.log(lfu.get('foo')) // => undefined
lfu.set('item1', 'foo')
lfu.set('item1', 'bar')
console.log(lfu.get('item1')) // => bar
lfu.clear();
console.log(lfu.size) // => 0
lfu.set('item1', 'foo')
lfu.set('item2', 'bar')
lfu.set('item3', 'baz')
lfu.forEach(([key, val], i) => {
console.log(`${i + 1})`, key, val)
})
// => 1) item1 foo
// => 2) item2 bar
// => 3) item3 baz
console.log(lfu.map<string>(([key, val], i) => `${i + 1}) ${key} -> ${val}`))
// => ["1) item1 foo", "2) item2 bar", "3) item3 baz"]
API 文档
新建 LFUCACH<T>( 选项? =%% )
证明 LFU 缓存
T - > 所存储值的类型
| 参数 | 说明 |
|---|---|
| 选项.max (可选) | 指定缓存中要累积的最大数量项。 默认为 100 |
| 选项.evicCount(可选) | 指定缓存满后要删除的项目数量。 若为 options.max 已指明,并且 options.evictCount 未指定,则默认为 10% 联 合 国 options.max 否则它默认为 1 |
| 选项.maxAge(可选) | 如果指定,则在指定后懒散地将密钥驱逐 maxAge。请注意,这是在 milliseconds (ms) |
大小
返回缓存中项目的总数.
这是一个 readonly 属性.
.set(键:字符串,值:T):空
抓取给定的密钥值对, 如果缓存满了, 则驱逐 LFU 密钥 .
.get(键:字符串): TQQ未定义
返回当前或未过期的缓存值, 否则返回 undefined
.delete(键:字符串):布尔
从缓存中删除给定的密钥。 回返 true 如果给定的密钥已存在, 且已成功删除, 则返回 false
.peek(键:字符串): T QQ 未定义
返回给定密钥的缓存值,而不增加给定密钥的访问频率。 回返 undefined 如果缓存中没有给定的密钥
.foreach(cb): ([键:字符串, val: T], i: 数字) QQ空出:空出
在整个缓存中显示
地图(cb): ([关键:字符串, val: T], i: 数字) QQ U: U []
穿过整个缓存并返回产生的数组
U - > 当返回类型 cb 名为
清除 (): 无效
清除缓存中的所有数据
捐款
我们没有留下任何东西 v1.0.0,但是总有开发的余地,因此,如果你发现任何错误或有任何建议,那么请着手为同样的问题提出问题或PR.