A scuttlebutt model that expires keys
var assert = require("assert")
var ExpiryModel = require("expiry-model")
var m1 = ExpiryModel()
var m2 = ExpiryModel()
var stream = m1.createStream()
stream.pipe(m2.createStream()).pipe(stream)
m1.on("update", function (key, value) {
assert.equal(key, "foo")
assert.equal(value, "bar")
console.log("values", key, value)
})
m2.set("foo", "bar")
var assert = require("assert")
var ExpiryModel = require("expiry-model")
var model1 = ExpiryModel()
var model2 = ExpiryModel()
model1.set("1", 1)
model1.set("2", 2)
model1.set("3", 3)
model1.set("foo", { foo: "one" })
model2.set("foo", { bar: "two" })
var s1 = model1.createStream()
s1.pipe(model2.createStream()).pipe(s1)
process.nextTick(function () {
var keys = Object.keys(model2.toJSON())
var foo = model1.get("foo")
var foo2 = model2.get("foo")
assert.deepEqual(foo, foo2)
assert.deepEqual(foo, {
foo: "one"
, bar: "two"
})
console.log("foo", foo)
assert.deepEqual(keys, ["1", "2", "3", "foo"])
console.log("keys", keys)
})
var assert = require("assert")
var setTimeout = require("timers").setTimeout
var ExpiryModel = require("expiry-model")
var model = ExpiryModel({
maxAge: 5
})
model.set("key", "volatile")
setTimeout(function () {
var value = model.get("key")
assert.equal(value, null)
console.log("value", value)
}, 10)
ExpiryModel is like scuttlebutt/model except you can
- configure how long to hold keys in memory before they expire.
- configure when to clean up old data
- configure a cap on how much data to hold in memory
- cleans up the scuttlebutts vector clock over time.
- values set are shallow merged into each other
Valid options are maxAge
and max
and anything else you can
pass to lru-cache.
If you set maxAge
to be low then the expiry model will only
hold keys in memory for that long and it will drop them
afterwards, including not passing them onto anyone it
replicates to.
maxAge
defaults to one day and max
defaults to 500.
npm install expiry-model
- Raynos