Skip to content

Instantly share code, notes, and snippets.

@loopj
Created December 30, 2011 10:47
Show Gist options
  • Save loopj/1539261 to your computer and use it in GitHub Desktop.
Save loopj/1539261 to your computer and use it in GitHub Desktop.
Redis passthrough cache for node
# Example usage
AvatarCache = new RedisCache
keyPrefix: "userAvatar:"
expiry: 3600
generator: (key, callback) ->
request "https://api.github.com/users/#{key}", (error, response, body) ->
if !error and response.statusCode == 200
user = JSON.parse(body)
generate user.avatar_url
AvatarCache.get "loopj", (response) ->
console.log response
class RedisCache
constructor: (opts) ->
@keyPrefix = opts.keyPrefix if opts.keyPrefix?
@generator = opts.generator
@redisClient = opts.redisClient if opts.redisClient?
@expiry = opts.expiry if opts.expiry?
get: (key, callback, expiry=null) ->
@redisClient.get prefixedKey(key), (err, response) ->
if response?
callback response
else
@generator key, (response) ->
@set key, response
callback response
set: (key, value, expiry=null) ->
@redisClient.set prefixedKey(key), value
@redisClient.expire prefixedKey(key), (expiry or @expiry if expiry or @expiry)
prefixedKey = (key) ->
"#{@keyPrefix}#{key}"
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment