【lru-cache】node.js的自動淘汰緩存

語言: CN / TW / HK

lru-cache 包可以在node中直接管理緩存數據,並支持LRU自動淘汰不常用項的算法。

  • LRU算法:自動淘汰不常用元素的項
  • 可指定緩數量多少
  • 可指定緩存項過期時間

使用方法

const LRU = require('lru-cache')

const cache = LRU({
  max: 500,
  maxAge: 1000 * 60 * 60
})

cache.set('key','value')
cache.get('key') // "value"

cache.reset() // 清空


可以自己封裝成lib

const lru = require("lru-cache")
const cache = new lru(100) // 最多緩存100個對象

async function get(...args) {

    let key = args.filter(arg => typeof arg === 'string').pop()
    let ttl = args.filter(arg => typeof arg === 'number').pop() || 0
    let callback = args.filter(arg => typeof arg === 'function').pop()

   // get
    let ret = cache.get(key)

    if(ret)
        return ret;
    
   // run
    ret = await callback()

    // set
    cache.set(key, ret, ttl*1000)

    return ret;

}

function keys() {
    return cache.keys()
}

module.exports = { get, keys }

調用 

let ret = await cache.get(key, async () => {
    return await request.get(`https://www.baidu.com`).then(resp => resp.body)
})