Skip to content

nextorigin/redis-sorted-cache

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

21 Commits
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

redis-sorted-cache

Build Status Coverage Status Dependency Status devDependency Status Downloads Greenkeeper badge

A helper class to expire keys from a sorted set in Redis, useful for timeseries caches

NPM

Installation

npm install --save redis-sorted-cache

Usage

Store a JSON object (timeseries event) in Redis and later retrieve all events within the cache TTL

From https://github.com/nextorigin/godot2/.../src/godot/reactor/redis-cache.coffee#L31

    SortedCache   = require "redis-sorted-cache"
    @cache        = new SortedCache {redis: @client, name: @id, @ttl}

  save: (redis, data, callback) ->
    ideally = errify callback

    data  = flatten data
    saved = []
    for key, val of data when key isnt "ttl"
      val = JSON.stringify val if key in ["tags"]
      saved.push key, val

    key    = "godot:#{@id}:#{data.host}:#{data.service}:#{data.time}"
    expire = @ttl or data.ttl
    ttl    = if @changeTtl then @ttl else data.ttl

    multi  = redis.multi()
    multi.hmset key, "ttl", ttl, saved...
         .EXPIRE key, expire
    await multi.exec ideally defer()
    @cache.addToSet key, data.time, callback

  load: =>
    ideally = errify @error

    await @cache.keys ideally defer keys
    multi = @client.multi()
    multi.hgetall key for key in keys
    await multi.exec ideally defer datas

    for data in datas
      data = unflatten data
      continue unless data
      types     = Producer::types
      data[key] = JSON.parse data[key] for key, type of types when data[key] and typeof data[key] isnt type
      @push data

    return

License

MIT

About

A helper class to expire keys from a sorted set in Redis, useful for timeseries caches

Topics

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published