mirror of
https://github.com/HackPlan/RootPanel.git
synced 2026-01-13 07:01:20 +08:00
59 lines
1.4 KiB
CoffeeScript
59 lines
1.4 KiB
CoffeeScript
stringify = require 'json-stable-stringify'
|
|
getParameterNames = require 'get-parameter-names'
|
|
CounterCache = require 'counter-cache'
|
|
_ = require 'underscore'
|
|
|
|
config = require '../config'
|
|
|
|
{redis} = app
|
|
|
|
exports.counter = new CounterCache()
|
|
|
|
exports.hashKey = (key) ->
|
|
if _.isString key
|
|
return "#{config.redis.prefix}:" + key
|
|
else
|
|
return "#{config.redis.prefix}:" + stringify key
|
|
|
|
# @param key: string|object
|
|
# @param setter(COMMAND(value, command_params...), key)
|
|
# @param callback(value)
|
|
exports.try = (key, setter, callback) ->
|
|
original_key = key
|
|
key = exports.hashKey key
|
|
|
|
redis.get key, (err, value) ->
|
|
if value != undefined and value != null
|
|
try
|
|
callback JSON.parse value
|
|
catch e
|
|
callback value
|
|
|
|
else
|
|
setter (value, command_params...) ->
|
|
original_value = value
|
|
|
|
if _.isObject value
|
|
value = JSON.stringify value
|
|
|
|
command = _.first getParameterNames setter
|
|
command = exports[command.toUpperCase()]
|
|
|
|
params = [key, value].concat command_params
|
|
params.push ->
|
|
callback original_value
|
|
|
|
command.apply @, params
|
|
|
|
, original_key
|
|
|
|
exports.delete = (key, callback) ->
|
|
redis.del exports.hashKey(key), ->
|
|
callback()
|
|
|
|
exports.SET = (key, value, callback) ->
|
|
redis.set key, value, callback
|
|
|
|
exports.SETEX = (key, value, seconds, callback) ->
|
|
redis.setex key, seconds, value, callback
|