Skip to content

Instantly share code, notes, and snippets.

@p1ho
Created February 25, 2019 07:20
Show Gist options
  • Select an option

  • Save p1ho/1c7d81db13be872440699202fef1c474 to your computer and use it in GitHub Desktop.

Select an option

Save p1ho/1c7d81db13be872440699202fef1c474 to your computer and use it in GitHub Desktop.
Cache that implements expiration on top of flat-cache
'use strict'
const flatCache = require('flat-cache')
module.exports = class Cache {
constructor (name, path, cacheTime = 0) {
this.name = name
this.path = path
this.cache = flatCache.load(name, path)
this.expire = cacheTime === 0 ? false : cacheTime * 1000 * 60
}
getKey (key) {
var now = new Date().getTime()
var value = this.cache.getKey(key)
if (value === undefined || (value.expire !== false && value.expire < now)) {
return undefined
} else {
return value.data
}
}
setKey (key, value) {
var now = new Date().getTime()
this.cache.setKey(key, {
expire: this.expire === false ? false : now + this.expire,
data: value
})
}
removeKey (key) {
this.cache.removeKey(key)
}
save () {
this.cache.save(true)
}
remove () {
flatCache.clearCacheById(this.name, this.path)
}
}
@tiagosiebler

Copy link
Copy Markdown

Why don't you make a npm module for this? It's a very helpful one.

@p1ho

p1ho commented Jul 2, 2019

Copy link
Copy Markdown
Author

Sorry for the late reply (I must have missed the notification), thanks for commenting!

I think there are tons of caching libraries on npm already that do things the same way, so I did not bother.
But if it's helpful to people, maybe I can make a PR to the flat-cache library I used in this gist.

@AmrSaber

Copy link
Copy Markdown

I want to suggest an update that you remove the expired data from the cache when you get and check them.

This will be useful especially that you use the noPrune option on saving.

@p1ho

p1ho commented Jun 15, 2020

Copy link
Copy Markdown
Author

I want to suggest an update that you remove the expired data from the cache when you get and check them.

This will be useful especially that you use the noPrune option on saving.

Thanks for the suggestion, is this what you mean?

  getKey (key) {
    var now = new Date().getTime()
    var value = this.cache.getKey(key)
    if (value === undefined) {
      return undefined
    } else {
      if (value.expire !== false && value.expire < now)) {
        this.removeKey(key)
        return undefined
      } else {
        return value.data
      }
    }
  }

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment