mirror of
https://github.com/HackPlan/RootPanel.git
synced 2026-03-28 23:49:11 +08:00
45 lines
1.1 KiB
CoffeeScript
45 lines
1.1 KiB
CoffeeScript
jsonStableStringify = require 'json-stable-stringify'
|
|
getParameterNames = require 'get-parameter-names'
|
|
redis = require 'redis'
|
|
_ = require 'underscore'
|
|
Q = require 'q'
|
|
|
|
class CacheManager
|
|
constructor: ({host, port, password}) ->
|
|
@redis = redis.createClient port, host,
|
|
auth_pass: password
|
|
|
|
_.extend @,
|
|
get: Q.denodeify @redis.get.bind @redis
|
|
del: Q.denodeify @redis.del.bind @redis
|
|
set: Q.denodeify @redis.set.bind @redis
|
|
setEx: Q.denodeify @redis.setex.bind @redis
|
|
|
|
hashKey: (key) ->
|
|
if _.isString key
|
|
return key
|
|
else
|
|
return jsonStableStringify key
|
|
|
|
try: (key, setter) ->
|
|
@tryHelper key, setter, =>
|
|
@set arguments...
|
|
|
|
tryExpire: (key, expired, setter) ->
|
|
@tryHelper key, setter, (key, value) =>
|
|
@setEx key, expired, value
|
|
|
|
refresh: (key) ->
|
|
@del @hashKey key
|
|
|
|
tryHelper: (key, setter, operator) ->
|
|
hashed_key = @hashKey key
|
|
|
|
@get(hashed_key).then (value) ->
|
|
Q().then ->
|
|
if value in [undefined, null]
|
|
Q(setter()).then (value) ->
|
|
command(hashed_key, value).thenReject value
|
|
else
|
|
return value
|