UNPKG

2.21 kBPlain TextView Raw
1N = require '../..'
2redis = require \redis
3Debug = require '../Helpers/Debug'
4
5debug-cache = new Debug 'N::Resource::Cache'
6
7class RedisCache
8
9 ({host = '127.0.0.1', port = 6379, database = 0}) ->
10
11 @client = redis.createClient {host, port}
12 @client.select database
13 @client.flushdb()
14
15 Get: (name, done) ->
16 @client.get name, (err, reply) ->
17 return done err if err?
18
19 done null, reply
20
21 Set: (name, value, done) ->
22 @client.set name, value, (err, reply) ~>
23 return done err if err?
24
25 @client.expire(name, 3600);
26 done null, reply
27
28 Delete: (name, done) ->
29 @client.del name, (err, reply) ~>
30 return done err if err?
31
32 done null, reply
33
34 Reset: ->
35 @client.flushdb()
36
37class MemCache
38
39 ->
40 @client = {}
41
42 Get: (name, done) ->
43 if @client[name]?
44 return done null, reply
45
46 done!
47
48 Set: (name, value, done) ->
49 @client[name] = value
50
51 done!
52
53 Delete: (name, done) ->
54 delete @client[name]
55
56 done!
57
58 Reset: ->
59 @client = {}
60
61
62class Cache
63
64 ->
65 if N.config?.cache?.type is \Redis or N.config?.cache is \Redis
66 debug-cache.Warn 'Redis cache init'
67 @client = new RedisCache N.config.cache if not is-type \String N.config.cache
68 @client = new RedisCache {} if is-type \String N.config.cache
69 else if N.config?.cache?.type is \Mem or N.config?.cache is \Mem
70 debug-cache.Warn 'Mem cache init'
71 @client = new MemCache
72 else
73 debug-cache.Warn 'No cache activated'
74
75 Get: (name, done) ->
76 return done! if not @client?
77 @client.Get name, (err, reply) ->
78 return done! done err if err?
79
80 debug-cache.Warn 'Cache answered for ' + name
81 done null, reply
82
83 Set: (name, value, done) ->
84 return done! if not @client?
85 @client.Set name, value, (err, reply) ~>
86 return done! done err if err?
87
88 debug-cache.Warn 'Cache updated for ' + name
89 done null, reply
90
91 Delete: (name, done) ->
92 return done! if not @client?
93 @client.Delete name, (err, reply) ~>
94 return done! done err if err?
95
96 debug-cache.Warn 'Cache deleted for ' + name
97 done null, reply
98
99 Reset: ->
100 return if not @client?
101 @client.Reset!
102
103module.exports = new Cache