cache-storage
Version:
[ABANDONED] Advanced cache storage for node js
126 lines (93 loc) • 2.08 kB
text/coffeescript
Storage = require './Storage'
redis = require 'redis'
assert = require 'assert'
class RedisStorage extends Storage
: '__redis__storage__meta__key__'
client: null
constructor: ->
if typeof window != 'undefined'
throw new Error 'FileStorage: Can not use this storage in browser'
= redis.createClient()
selectDatabase: (database, fn) ->
.SELECT database, fn
_read: (name, fn, defaults = null) ->
.GET name, (err, data) =>
if err
fn(err, null)
else if data == null
if defaults == null
fn(null, null)
else
name, defaults, (err) =>
if err
fn(err, null)
else
name, (err, data) ->
if err
fn(err, null)
else
fn(null, data)
else
fn(null, JSON.parse(data))
_write: (name, data, fn) ->
.SET name, JSON.stringify(data), (err) ->
if err
fn(err)
else
fn(null)
_remove: (name, fn) ->
.DEL name, fn
_removeAll: (fn) ->
.FLUSHDB fn
getMeta: (fn) ->
RedisStorage.META_KEY, fn, {}
read: (key, fn) ->
key, (err, data) =>
if err
fn(err, null)
else if data == null
fn(null, null)
else
(key, (err, meta) =>
if err
fn(err, null)
else
(meta, (err, state) =>
if err
fn(err, null)
else if state
fn(null, data)
else
(key, ->
fn(null, null)
)
)
)
write: (key, data, dependencies = {}, fn) ->
key, data, (err) =>
if err
fn(err)
else
( (err, meta) =>
if err
fn(err)
else
meta[key] = dependencies
RedisStorage.META_KEY, meta, fn
)
remove: (key, fn) ->
( (err, meta) =>
if err
fn(err)
else
if typeof meta[key] != 'undefined'
delete meta[key]
key, (err) =>
if err
fn(err)
else
RedisStorage.META_KEY, meta, fn
)
removeAll: (fn) ->
(fn)
module.exports = RedisStorage