@onlineapps/conn-base-cache 1.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/API.md ADDED
@@ -0,0 +1,692 @@
1
+ <a name="module_@onlineapps/conn-base-cache"></a>
2
+
3
+ ## @onlineapps/conn-base-cache
4
+ Redis cache connector with TTL, invalidation, and namespace support for OA Drive microservices.
5
+ This connector provides a high-level abstraction over Redis operations with automatic key prefixing,
6
+ statistics tracking, and namespace isolation.
7
+
8
+ IMPORTANT: This connector uses "cache:" prefix for all keys.
9
+ Never accesses "obs:" namespace (reserved for monitoring).
10
+
11
+ **See**: [GitHub Repository](https://github.com/onlineapps/oa-drive/tree/main/shared/connector/conn-base-cache)
12
+ **Since**: 1.0.0
13
+ **Author**: OA Drive Team
14
+ **License**: MIT
15
+
16
+ * [@onlineapps/conn-base-cache](#module_@onlineapps/conn-base-cache)
17
+ * _static_
18
+ * [.VERSION](#module_@onlineapps/conn-base-cache.VERSION) : <code>string</code>
19
+ * _inner_
20
+ * [~CacheConnector](#module_@onlineapps/conn-base-cache..CacheConnector)
21
+ * [new CacheConnector()](#new_module_@onlineapps/conn-base-cache..CacheConnector_new)
22
+ * [new CacheConnector([config])](#new_module_@onlineapps/conn-base-cache..CacheConnector_new)
23
+ * [~CacheConnector](#module_@onlineapps/conn-base-cache..CacheConnector)
24
+ * [new CacheConnector()](#new_module_@onlineapps/conn-base-cache..CacheConnector_new)
25
+ * [new CacheConnector([config])](#new_module_@onlineapps/conn-base-cache..CacheConnector_new)
26
+ * [~connect()](#module_@onlineapps/conn-base-cache..connect) ⇒ <code>Promise.&lt;boolean&gt;</code>
27
+ * [~disconnect()](#module_@onlineapps/conn-base-cache..disconnect) ⇒ <code>Promise.&lt;void&gt;</code>
28
+ * [~get(key)](#module_@onlineapps/conn-base-cache..get) ⇒ <code>Promise.&lt;(\*\|null)&gt;</code>
29
+ * [~set(key, value, [ttl])](#module_@onlineapps/conn-base-cache..set) ⇒ <code>Promise.&lt;boolean&gt;</code>
30
+ * [~delete(key)](#module_@onlineapps/conn-base-cache..delete) ⇒ <code>Promise.&lt;boolean&gt;</code>
31
+ * [~deleteByPattern(pattern)](#module_@onlineapps/conn-base-cache..deleteByPattern) ⇒ <code>Promise.&lt;number&gt;</code>
32
+ * [~exists(key)](#module_@onlineapps/conn-base-cache..exists) ⇒ <code>Promise.&lt;boolean&gt;</code>
33
+ * [~ttl(key)](#module_@onlineapps/conn-base-cache..ttl) ⇒ <code>Promise.&lt;number&gt;</code>
34
+ * [~expire(key, ttl)](#module_@onlineapps/conn-base-cache..expire) ⇒ <code>Promise.&lt;boolean&gt;</code>
35
+ * [~incr(key, [increment])](#module_@onlineapps/conn-base-cache..incr) ⇒ <code>Promise.&lt;number&gt;</code>
36
+ * [~decr(key, [decrement])](#module_@onlineapps/conn-base-cache..decr) ⇒ <code>Promise.&lt;number&gt;</code>
37
+ * [~mget(keys)](#module_@onlineapps/conn-base-cache..mget) ⇒ <code>Promise.&lt;Object&gt;</code>
38
+ * [~mset(keyValues, [ttl])](#module_@onlineapps/conn-base-cache..mset) ⇒ <code>Promise.&lt;boolean&gt;</code>
39
+ * [~flush([confirm])](#module_@onlineapps/conn-base-cache..flush) ⇒ <code>Promise.&lt;boolean&gt;</code>
40
+ * [~getStats()](#module_@onlineapps/conn-base-cache..getStats) ⇒ <code>CacheStats</code> \| <code>number</code> \| <code>number</code> \| <code>number</code> \| <code>number</code> \| <code>number</code> \| <code>string</code>
41
+ * [~resetStats()](#module_@onlineapps/conn-base-cache..resetStats) ⇒ <code>void</code>
42
+ * [~withNamespace(namespace)](#module_@onlineapps/conn-base-cache..withNamespace) ⇒ <code>CacheConnector</code>
43
+ * [~wrap(fn, [options])](#module_@onlineapps/conn-base-cache..wrap) ⇒ <code>function</code>
44
+ * [~healthCheck()](#module_@onlineapps/conn-base-cache..healthCheck) ⇒ <code>Promise.&lt;boolean&gt;</code>
45
+ * [~create(config)](#module_@onlineapps/conn-base-cache..create) ⇒ <code>CacheConnector</code>
46
+ * [~CacheConfig](#module_@onlineapps/conn-base-cache..CacheConfig) : <code>Object</code>
47
+ * [~CacheStats](#module_@onlineapps/conn-base-cache..CacheStats) : <code>Object</code>
48
+
49
+ <a name="module_@onlineapps/conn-base-cache.VERSION"></a>
50
+
51
+ ### @onlineapps/conn-base-cache.VERSION : <code>string</code>
52
+ Current version
53
+
54
+ **Kind**: static constant of [<code>@onlineapps/conn-base-cache</code>](#module_@onlineapps/conn-base-cache)
55
+ <a name="module_@onlineapps/conn-base-cache..CacheConnector"></a>
56
+
57
+ ### @onlineapps/conn-base-cache~CacheConnector
58
+ **Kind**: inner class of [<code>@onlineapps/conn-base-cache</code>](#module_@onlineapps/conn-base-cache)
59
+
60
+ * [~CacheConnector](#module_@onlineapps/conn-base-cache..CacheConnector)
61
+ * [new CacheConnector()](#new_module_@onlineapps/conn-base-cache..CacheConnector_new)
62
+ * [new CacheConnector([config])](#new_module_@onlineapps/conn-base-cache..CacheConnector_new)
63
+
64
+ <a name="new_module_@onlineapps/conn-base-cache..CacheConnector_new"></a>
65
+
66
+ #### new CacheConnector()
67
+ Redis cache connector providing caching operations with automatic key management
68
+
69
+ **Example** *(Basic Usage)*
70
+ ```js
71
+ const cache = new CacheConnector({
72
+ host: 'localhost',
73
+ port: 6379,
74
+ defaultTTL: 3600
75
+ });
76
+ await cache.connect();
77
+ await cache.set('user:123', { name: 'John' }, 600);
78
+ const user = await cache.get('user:123');
79
+ ```
80
+ **Example** *(With Namespace)*
81
+ ```js
82
+ const cache = new CacheConnector({
83
+ namespace: 'invoice-service'
84
+ });
85
+ await cache.set('inv:123', data); // Actual key: cache:invoice-service:inv:123
86
+ ```
87
+ <a name="new_module_@onlineapps/conn-base-cache..CacheConnector_new"></a>
88
+
89
+ #### new CacheConnector([config])
90
+ Creates a new CacheConnector instance
91
+
92
+ **Throws**:
93
+
94
+ - <code>TypeError</code> If configuration is invalid
95
+
96
+
97
+ | Param | Type | Default | Description |
98
+ | --- | --- | --- | --- |
99
+ | [config] | <code>Object</code> | <code>{}</code> | Configuration options |
100
+ | [config.host] | <code>string</code> | <code>&quot;&#x27;localhost&#x27;&quot;</code> | Redis server host |
101
+ | [config.port] | <code>number</code> | <code>6379</code> | Redis server port |
102
+ | [config.password] | <code>string</code> | | Redis password for authentication |
103
+ | [config.db] | <code>number</code> | <code>0</code> | Redis database number to use |
104
+ | [config.defaultTTL] | <code>number</code> | <code>3600</code> | Default TTL in seconds for cached items |
105
+ | [config.namespace] | <code>string</code> | <code>&quot;&#x27;&#x27;&quot;</code> | Namespace prefix for all keys |
106
+ | [config.maxRetries] | <code>number</code> | <code>3</code> | Maximum connection retry attempts |
107
+ | [config.retryDelay] | <code>number</code> | <code>100</code> | Initial retry delay in milliseconds |
108
+ | [config.enableOfflineQueue] | <code>boolean</code> | <code>true</code> | Queue commands when disconnected |
109
+ | [config.lazyConnect] | <code>boolean</code> | <code>false</code> | Delay connection until first operation |
110
+
111
+ **Example** *(Full Configuration)*
112
+ ```js
113
+ const cache = new CacheConnector({
114
+ host: 'redis.example.com',
115
+ port: 6380,
116
+ password: 'secret',
117
+ namespace: 'my-service',
118
+ defaultTTL: 1800,
119
+ maxRetries: 5,
120
+ enableOfflineQueue: false
121
+ });
122
+ ```
123
+ <a name="module_@onlineapps/conn-base-cache..CacheConnector"></a>
124
+
125
+ ### @onlineapps/conn-base-cache~CacheConnector
126
+ **Kind**: inner class of [<code>@onlineapps/conn-base-cache</code>](#module_@onlineapps/conn-base-cache)
127
+
128
+ * [~CacheConnector](#module_@onlineapps/conn-base-cache..CacheConnector)
129
+ * [new CacheConnector()](#new_module_@onlineapps/conn-base-cache..CacheConnector_new)
130
+ * [new CacheConnector([config])](#new_module_@onlineapps/conn-base-cache..CacheConnector_new)
131
+
132
+ <a name="new_module_@onlineapps/conn-base-cache..CacheConnector_new"></a>
133
+
134
+ #### new CacheConnector()
135
+ Redis cache connector providing caching operations with automatic key management
136
+
137
+ **Example** *(Basic Usage)*
138
+ ```js
139
+ const cache = new CacheConnector({
140
+ host: 'localhost',
141
+ port: 6379,
142
+ defaultTTL: 3600
143
+ });
144
+ await cache.connect();
145
+ await cache.set('user:123', { name: 'John' }, 600);
146
+ const user = await cache.get('user:123');
147
+ ```
148
+ **Example** *(With Namespace)*
149
+ ```js
150
+ const cache = new CacheConnector({
151
+ namespace: 'invoice-service'
152
+ });
153
+ await cache.set('inv:123', data); // Actual key: cache:invoice-service:inv:123
154
+ ```
155
+ <a name="new_module_@onlineapps/conn-base-cache..CacheConnector_new"></a>
156
+
157
+ #### new CacheConnector([config])
158
+ Creates a new CacheConnector instance
159
+
160
+ **Throws**:
161
+
162
+ - <code>TypeError</code> If configuration is invalid
163
+
164
+
165
+ | Param | Type | Default | Description |
166
+ | --- | --- | --- | --- |
167
+ | [config] | <code>Object</code> | <code>{}</code> | Configuration options |
168
+ | [config.host] | <code>string</code> | <code>&quot;&#x27;localhost&#x27;&quot;</code> | Redis server host |
169
+ | [config.port] | <code>number</code> | <code>6379</code> | Redis server port |
170
+ | [config.password] | <code>string</code> | | Redis password for authentication |
171
+ | [config.db] | <code>number</code> | <code>0</code> | Redis database number to use |
172
+ | [config.defaultTTL] | <code>number</code> | <code>3600</code> | Default TTL in seconds for cached items |
173
+ | [config.namespace] | <code>string</code> | <code>&quot;&#x27;&#x27;&quot;</code> | Namespace prefix for all keys |
174
+ | [config.maxRetries] | <code>number</code> | <code>3</code> | Maximum connection retry attempts |
175
+ | [config.retryDelay] | <code>number</code> | <code>100</code> | Initial retry delay in milliseconds |
176
+ | [config.enableOfflineQueue] | <code>boolean</code> | <code>true</code> | Queue commands when disconnected |
177
+ | [config.lazyConnect] | <code>boolean</code> | <code>false</code> | Delay connection until first operation |
178
+
179
+ **Example** *(Full Configuration)*
180
+ ```js
181
+ const cache = new CacheConnector({
182
+ host: 'redis.example.com',
183
+ port: 6380,
184
+ password: 'secret',
185
+ namespace: 'my-service',
186
+ defaultTTL: 1800,
187
+ maxRetries: 5,
188
+ enableOfflineQueue: false
189
+ });
190
+ ```
191
+ <a name="module_@onlineapps/conn-base-cache..connect"></a>
192
+
193
+ ### @onlineapps/conn-base-cache~connect() ⇒ <code>Promise.&lt;boolean&gt;</code>
194
+ Establishes connection to Redis server
195
+
196
+ **Kind**: inner method of [<code>@onlineapps/conn-base-cache</code>](#module_@onlineapps/conn-base-cache)
197
+ **Returns**: <code>Promise.&lt;boolean&gt;</code> - Returns true when connection is established
198
+ **Throws**:
199
+
200
+ - <code>Error</code> Throws error if connection fails after all retries
201
+
202
+ **Emits**: [<code>connect</code>](#CacheConnector+event_connect), [<code>error</code>](#CacheConnector+event_error), [<code>close</code>](#CacheConnector+event_close)
203
+ **Example** *(Simple Connection)*
204
+ ```js
205
+ try {
206
+ await cache.connect();
207
+ console.log('Connected to Redis');
208
+ } catch (error) {
209
+ console.error('Failed to connect:', error);
210
+ }
211
+ ```
212
+ **Example** *(With Event Handlers)*
213
+ ```js
214
+ cache.client.on('connect', () => {
215
+ console.log('Redis connected');
216
+ });
217
+
218
+ cache.client.on('error', (err) => {
219
+ console.error('Redis error:', err);
220
+ });
221
+
222
+ await cache.connect();
223
+ ```
224
+ <a name="module_@onlineapps/conn-base-cache..disconnect"></a>
225
+
226
+ ### @onlineapps/conn-base-cache~disconnect() ⇒ <code>Promise.&lt;void&gt;</code>
227
+ Disconnect from Redis server gracefully
228
+
229
+ **Kind**: inner method of [<code>@onlineapps/conn-base-cache</code>](#module_@onlineapps/conn-base-cache)
230
+ **Example**
231
+ ```js
232
+ await cache.disconnect();
233
+ console.log('Disconnected from Redis');
234
+ ```
235
+ <a name="module_@onlineapps/conn-base-cache..get"></a>
236
+
237
+ ### @onlineapps/conn-base-cache~get(key) ⇒ <code>Promise.&lt;(\*\|null)&gt;</code>
238
+ Retrieves a value from cache by key
239
+
240
+ **Kind**: inner method of [<code>@onlineapps/conn-base-cache</code>](#module_@onlineapps/conn-base-cache)
241
+ **Returns**: <code>Promise.&lt;(\*\|null)&gt;</code> - The cached value (parsed from JSON if applicable) or null if not found
242
+ **Throws**:
243
+
244
+ - <code>Error</code> Throws error if Redis operation fails
245
+
246
+ **Emits**: <code>CacheConnector#event:hit - When cache hit occurs</code>, <code>CacheConnector#event:miss - When cache miss occurs</code>
247
+
248
+ | Param | Type | Description |
249
+ | --- | --- | --- |
250
+ | key | <code>string</code> | Cache key to retrieve |
251
+
252
+ **Example** *(Get Simple Value)*
253
+ ```js
254
+ const value = await cache.get('user:123');
255
+ if (value) {
256
+ console.log('User found:', value);
257
+ }
258
+ ```
259
+ **Example** *(Get with Fallback)*
260
+ ```js
261
+ let user = await cache.get('user:123');
262
+ if (!user) {
263
+ user = await fetchFromDatabase(123);
264
+ await cache.set('user:123', user, 600);
265
+ }
266
+ ```
267
+ <a name="module_@onlineapps/conn-base-cache..set"></a>
268
+
269
+ ### @onlineapps/conn-base-cache~set(key, value, [ttl]) ⇒ <code>Promise.&lt;boolean&gt;</code>
270
+ Stores a value in cache with optional TTL
271
+
272
+ **Kind**: inner method of [<code>@onlineapps/conn-base-cache</code>](#module_@onlineapps/conn-base-cache)
273
+ **Returns**: <code>Promise.&lt;boolean&gt;</code> - Returns true on successful storage
274
+ **Throws**:
275
+
276
+ - <code>Error</code> Throws error if Redis operation fails
277
+
278
+
279
+ | Param | Type | Description |
280
+ | --- | --- | --- |
281
+ | key | <code>string</code> | Cache key |
282
+ | value | <code>\*</code> | Value to cache (will be JSON stringified if not a string) |
283
+ | [ttl] | <code>number</code> | Time to live in seconds (uses defaultTTL if not specified) |
284
+
285
+ **Example** *(Set with Default TTL)*
286
+ ```js
287
+ await cache.set('config', { theme: 'dark' });
288
+ ```
289
+ **Example** *(Set with Custom TTL)*
290
+ ```js
291
+ await cache.set('session:abc', sessionData, 1800); // 30 minutes
292
+ ```
293
+ **Example** *(Set Permanent (no expiry))*
294
+ ```js
295
+ await cache.set('permanent:data', data, 0);
296
+ ```
297
+ <a name="module_@onlineapps/conn-base-cache..delete"></a>
298
+
299
+ ### @onlineapps/conn-base-cache~delete(key) ⇒ <code>Promise.&lt;boolean&gt;</code>
300
+ Delete a single key from cache
301
+
302
+ **Kind**: inner method of [<code>@onlineapps/conn-base-cache</code>](#module_@onlineapps/conn-base-cache)
303
+ **Returns**: <code>Promise.&lt;boolean&gt;</code> - Returns true if key was deleted
304
+ **Throws**:
305
+
306
+ - <code>Error</code> Throws error if Redis operation fails
307
+
308
+
309
+ | Param | Type | Description |
310
+ | --- | --- | --- |
311
+ | key | <code>string</code> | Cache key to delete |
312
+
313
+ **Example**
314
+ ```js
315
+ const deleted = await cache.delete('user:123');
316
+ if (deleted) {
317
+ console.log('Key deleted');
318
+ }
319
+ ```
320
+ <a name="module_@onlineapps/conn-base-cache..deleteByPattern"></a>
321
+
322
+ ### @onlineapps/conn-base-cache~deleteByPattern(pattern) ⇒ <code>Promise.&lt;number&gt;</code>
323
+ Deletes keys matching a pattern
324
+
325
+ **Kind**: inner method of [<code>@onlineapps/conn-base-cache</code>](#module_@onlineapps/conn-base-cache)
326
+ **Returns**: <code>Promise.&lt;number&gt;</code> - Number of deleted keys
327
+ **Throws**:
328
+
329
+ - <code>Error</code> Throws error if pattern deletion fails
330
+
331
+ **Warning**: This operation can be expensive on large datasets
332
+
333
+ | Param | Type | Description |
334
+ | --- | --- | --- |
335
+ | pattern | <code>string</code> | Redis key pattern (e.g., "user:*", "session:*") |
336
+
337
+ **Example** *(Delete All User Cache Entries)*
338
+ ```js
339
+ const deleted = await cache.deleteByPattern('user:*');
340
+ console.log(`Deleted ${deleted} user entries`);
341
+ ```
342
+ **Example** *(Delete Specific Session Pattern)*
343
+ ```js
344
+ await cache.deleteByPattern('session:user:123:*');
345
+ ```
346
+ <a name="module_@onlineapps/conn-base-cache..exists"></a>
347
+
348
+ ### @onlineapps/conn-base-cache~exists(key) ⇒ <code>Promise.&lt;boolean&gt;</code>
349
+ Check if key exists in cache
350
+
351
+ **Kind**: inner method of [<code>@onlineapps/conn-base-cache</code>](#module_@onlineapps/conn-base-cache)
352
+ **Returns**: <code>Promise.&lt;boolean&gt;</code> - Returns true if key exists
353
+ **Throws**:
354
+
355
+ - <code>Error</code> Throws error if Redis operation fails
356
+
357
+
358
+ | Param | Type | Description |
359
+ | --- | --- | --- |
360
+ | key | <code>string</code> | Cache key to check |
361
+
362
+ **Example**
363
+ ```js
364
+ if (await cache.exists('user:123')) {
365
+ console.log('User is cached');
366
+ }
367
+ ```
368
+ <a name="module_@onlineapps/conn-base-cache..ttl"></a>
369
+
370
+ ### @onlineapps/conn-base-cache~ttl(key) ⇒ <code>Promise.&lt;number&gt;</code>
371
+ Get remaining TTL for key
372
+
373
+ **Kind**: inner method of [<code>@onlineapps/conn-base-cache</code>](#module_@onlineapps/conn-base-cache)
374
+ **Returns**: <code>Promise.&lt;number&gt;</code> - TTL in seconds, -1 if no TTL, -2 if not exists
375
+ **Throws**:
376
+
377
+ - <code>Error</code> Throws error if Redis operation fails
378
+
379
+
380
+ | Param | Type | Description |
381
+ | --- | --- | --- |
382
+ | key | <code>string</code> | Cache key |
383
+
384
+ **Example**
385
+ ```js
386
+ const ttl = await cache.ttl('session:abc');
387
+ if (ttl > 0) {
388
+ console.log(`Session expires in ${ttl} seconds`);
389
+ } else if (ttl === -1) {
390
+ console.log('Session has no expiry');
391
+ } else {
392
+ console.log('Session does not exist');
393
+ }
394
+ ```
395
+ <a name="module_@onlineapps/conn-base-cache..expire"></a>
396
+
397
+ ### @onlineapps/conn-base-cache~expire(key, ttl) ⇒ <code>Promise.&lt;boolean&gt;</code>
398
+ Update TTL for existing key
399
+
400
+ **Kind**: inner method of [<code>@onlineapps/conn-base-cache</code>](#module_@onlineapps/conn-base-cache)
401
+ **Returns**: <code>Promise.&lt;boolean&gt;</code> - Returns true if TTL was set
402
+ **Throws**:
403
+
404
+ - <code>Error</code> Throws error if Redis operation fails
405
+
406
+
407
+ | Param | Type | Description |
408
+ | --- | --- | --- |
409
+ | key | <code>string</code> | Cache key |
410
+ | ttl | <code>number</code> | New TTL in seconds |
411
+
412
+ **Example**
413
+ ```js
414
+ // Extend session by 30 minutes
415
+ await cache.expire('session:abc', 1800);
416
+ ```
417
+ <a name="module_@onlineapps/conn-base-cache..incr"></a>
418
+
419
+ ### @onlineapps/conn-base-cache~incr(key, [increment]) ⇒ <code>Promise.&lt;number&gt;</code>
420
+ Increment numeric value atomically
421
+
422
+ **Kind**: inner method of [<code>@onlineapps/conn-base-cache</code>](#module_@onlineapps/conn-base-cache)
423
+ **Returns**: <code>Promise.&lt;number&gt;</code> - New value after increment
424
+ **Throws**:
425
+
426
+ - <code>Error</code> Throws error if Redis operation fails
427
+
428
+
429
+ | Param | Type | Default | Description |
430
+ | --- | --- | --- | --- |
431
+ | key | <code>string</code> | | Cache key |
432
+ | [increment] | <code>number</code> | <code>1</code> | Increment value |
433
+
434
+ **Example** *(Simple Counter)*
435
+ ```js
436
+ const count = await cache.incr('page:views');
437
+ console.log(`Page views: ${count}`);
438
+ ```
439
+ **Example** *(Increment by Value)*
440
+ ```js
441
+ const score = await cache.incr('user:score', 10);
442
+ ```
443
+ <a name="module_@onlineapps/conn-base-cache..decr"></a>
444
+
445
+ ### @onlineapps/conn-base-cache~decr(key, [decrement]) ⇒ <code>Promise.&lt;number&gt;</code>
446
+ Decrement numeric value atomically
447
+
448
+ **Kind**: inner method of [<code>@onlineapps/conn-base-cache</code>](#module_@onlineapps/conn-base-cache)
449
+ **Returns**: <code>Promise.&lt;number&gt;</code> - New value after decrement
450
+ **Throws**:
451
+
452
+ - <code>Error</code> Throws error if Redis operation fails
453
+
454
+
455
+ | Param | Type | Default | Description |
456
+ | --- | --- | --- | --- |
457
+ | key | <code>string</code> | | Cache key |
458
+ | [decrement] | <code>number</code> | <code>1</code> | Decrement value |
459
+
460
+ **Example**
461
+ ```js
462
+ const remaining = await cache.decr('inventory:count', 1);
463
+ if (remaining < 0) {
464
+ console.log('Out of stock');
465
+ }
466
+ ```
467
+ <a name="module_@onlineapps/conn-base-cache..mget"></a>
468
+
469
+ ### @onlineapps/conn-base-cache~mget(keys) ⇒ <code>Promise.&lt;Object&gt;</code>
470
+ Get multiple values at once
471
+
472
+ **Kind**: inner method of [<code>@onlineapps/conn-base-cache</code>](#module_@onlineapps/conn-base-cache)
473
+ **Returns**: <code>Promise.&lt;Object&gt;</code> - Key-value object with found values
474
+ **Throws**:
475
+
476
+ - <code>Error</code> Throws error if Redis operation fails
477
+
478
+
479
+ | Param | Type | Description |
480
+ | --- | --- | --- |
481
+ | keys | <code>Array.&lt;string&gt;</code> | Array of cache keys |
482
+
483
+ **Example**
484
+ ```js
485
+ const result = await cache.mget(['user:1', 'user:2', 'user:3']);
486
+ // Returns: { 'user:1': {...}, 'user:2': {...} }
487
+ // Missing keys are not included in result
488
+ ```
489
+ <a name="module_@onlineapps/conn-base-cache..mset"></a>
490
+
491
+ ### @onlineapps/conn-base-cache~mset(keyValues, [ttl]) ⇒ <code>Promise.&lt;boolean&gt;</code>
492
+ Set multiple values at once
493
+
494
+ **Kind**: inner method of [<code>@onlineapps/conn-base-cache</code>](#module_@onlineapps/conn-base-cache)
495
+ **Returns**: <code>Promise.&lt;boolean&gt;</code> - Returns true on success
496
+ **Throws**:
497
+
498
+ - <code>Error</code> Throws error if Redis operation fails
499
+
500
+
501
+ | Param | Type | Description |
502
+ | --- | --- | --- |
503
+ | keyValues | <code>Object</code> | Key-value pairs to set |
504
+ | [ttl] | <code>number</code> | TTL in seconds for all keys |
505
+
506
+ **Example**
507
+ ```js
508
+ await cache.mset({
509
+ 'user:1': { name: 'Alice' },
510
+ 'user:2': { name: 'Bob' },
511
+ 'user:3': { name: 'Charlie' }
512
+ }, 3600);
513
+ ```
514
+ <a name="module_@onlineapps/conn-base-cache..flush"></a>
515
+
516
+ ### @onlineapps/conn-base-cache~flush([confirm]) ⇒ <code>Promise.&lt;boolean&gt;</code>
517
+ Flush all cache keys (dangerous!)
518
+
519
+ **Kind**: inner method of [<code>@onlineapps/conn-base-cache</code>](#module_@onlineapps/conn-base-cache)
520
+ **Returns**: <code>Promise.&lt;boolean&gt;</code> - Returns true on success
521
+ **Throws**:
522
+
523
+ - <code>Error</code> If confirmation not provided or flush fails
524
+
525
+ **Warning**: This will delete ALL cache keys with the configured prefix
526
+
527
+ | Param | Type | Default | Description |
528
+ | --- | --- | --- | --- |
529
+ | [confirm] | <code>boolean</code> | <code>false</code> | Must be true to execute |
530
+
531
+ **Example**
532
+ ```js
533
+ // Safety check required
534
+ await cache.flush(true);
535
+ console.log('All cache cleared');
536
+ ```
537
+ <a name="module_@onlineapps/conn-base-cache..getStats"></a>
538
+
539
+ ### @onlineapps/conn-base-cache~getStats() ⇒ <code>CacheStats</code> \| <code>number</code> \| <code>number</code> \| <code>number</code> \| <code>number</code> \| <code>number</code> \| <code>string</code>
540
+ Get cache statistics
541
+
542
+ **Kind**: inner method of [<code>@onlineapps/conn-base-cache</code>](#module_@onlineapps/conn-base-cache)
543
+ **Returns**: <code>CacheStats</code> - Current statistics<code>number</code> - stats.hits - Number of cache hits<code>number</code> - stats.misses - Number of cache misses<code>number</code> - stats.sets - Number of set operations<code>number</code> - stats.deletes - Number of delete operations<code>number</code> - stats.errors - Number of errors<code>string</code> - stats.hitRate - Hit rate percentage
544
+ **Example**
545
+ ```js
546
+ const stats = cache.getStats();
547
+ console.log(`Hit rate: ${stats.hitRate}`);
548
+ console.log(`Total operations: ${stats.hits + stats.misses}`);
549
+ ```
550
+ <a name="module_@onlineapps/conn-base-cache..resetStats"></a>
551
+
552
+ ### @onlineapps/conn-base-cache~resetStats() ⇒ <code>void</code>
553
+ Reset statistics counters
554
+
555
+ **Kind**: inner method of [<code>@onlineapps/conn-base-cache</code>](#module_@onlineapps/conn-base-cache)
556
+ **Example**
557
+ ```js
558
+ cache.resetStats();
559
+ // All counters set to 0
560
+ ```
561
+ <a name="module_@onlineapps/conn-base-cache..withNamespace"></a>
562
+
563
+ ### @onlineapps/conn-base-cache~withNamespace(namespace) ⇒ <code>CacheConnector</code>
564
+ Creates a new CacheConnector instance with additional namespace
565
+
566
+ **Kind**: inner method of [<code>@onlineapps/conn-base-cache</code>](#module_@onlineapps/conn-base-cache)
567
+ **Returns**: <code>CacheConnector</code> - New instance with combined namespace
568
+
569
+ | Param | Type | Description |
570
+ | --- | --- | --- |
571
+ | namespace | <code>string</code> | Additional namespace to append |
572
+
573
+ **Example**
574
+ ```js
575
+ const baseCache = new CacheConnector({ namespace: 'app' });
576
+ const userCache = baseCache.withNamespace('users');
577
+ const sessionCache = baseCache.withNamespace('sessions');
578
+
579
+ // userCache keys: cache:app:users:*
580
+ // sessionCache keys: cache:app:sessions:*
581
+ ```
582
+ <a name="module_@onlineapps/conn-base-cache..wrap"></a>
583
+
584
+ ### @onlineapps/conn-base-cache~wrap(fn, [options]) ⇒ <code>function</code>
585
+ Wraps a function with caching (memoization)
586
+
587
+ **Kind**: inner method of [<code>@onlineapps/conn-base-cache</code>](#module_@onlineapps/conn-base-cache)
588
+ **Returns**: <code>function</code> - Wrapped function with caching
589
+
590
+ | Param | Type | Default | Description |
591
+ | --- | --- | --- | --- |
592
+ | fn | <code>function</code> | | Async function to wrap |
593
+ | [options] | <code>Object</code> | <code>{}</code> | Wrapping options |
594
+ | [options.ttl] | <code>number</code> | | Cache TTL in seconds |
595
+ | [options.keyPrefix] | <code>string</code> | | Prefix for cache keys |
596
+ | [options.keyGenerator] | <code>function</code> | | Custom key generation function |
597
+
598
+ **Example** *(Basic Function Wrapping)*
599
+ ```js
600
+ const expensiveOperation = async (userId) => {
601
+ // Complex database query
602
+ return await db.query('SELECT * FROM users WHERE id = ?', [userId]);
603
+ };
604
+
605
+ const cachedOperation = cache.wrap(expensiveOperation, {
606
+ ttl: 600,
607
+ keyPrefix: 'expensive-op'
608
+ });
609
+
610
+ // First call hits database
611
+ const result1 = await cachedOperation(123);
612
+
613
+ // Second call returns from cache
614
+ const result2 = await cachedOperation(123);
615
+ ```
616
+ **Example** *(Custom Key Generation)*
617
+ ```js
618
+ const searchUsers = cache.wrap(async (filters) => {
619
+ return await db.searchUsers(filters);
620
+ }, {
621
+ ttl: 300,
622
+ keyGenerator: (filters) => `search:${JSON.stringify(filters)}`
623
+ });
624
+ ```
625
+ <a name="module_@onlineapps/conn-base-cache..healthCheck"></a>
626
+
627
+ ### @onlineapps/conn-base-cache~healthCheck() ⇒ <code>Promise.&lt;boolean&gt;</code>
628
+ Perform health check on Redis connection
629
+
630
+ **Kind**: inner method of [<code>@onlineapps/conn-base-cache</code>](#module_@onlineapps/conn-base-cache)
631
+ **Returns**: <code>Promise.&lt;boolean&gt;</code> - Returns true if healthy
632
+ **Example**
633
+ ```js
634
+ if (await cache.healthCheck()) {
635
+ console.log('Redis is healthy');
636
+ } else {
637
+ console.error('Redis is down');
638
+ }
639
+ ```
640
+ <a name="module_@onlineapps/conn-base-cache..create"></a>
641
+
642
+ ### @onlineapps/conn-base-cache~create(config) ⇒ <code>CacheConnector</code>
643
+ Factory function to create cache instance
644
+
645
+ **Kind**: inner method of [<code>@onlineapps/conn-base-cache</code>](#module_@onlineapps/conn-base-cache)
646
+ **Returns**: <code>CacheConnector</code> - New cache connector instance
647
+
648
+ | Param | Type | Description |
649
+ | --- | --- | --- |
650
+ | config | <code>CacheConfig</code> | Configuration object |
651
+
652
+ **Example**
653
+ ```js
654
+ const cache = CacheConnector.create({
655
+ host: 'localhost',
656
+ namespace: 'my-service'
657
+ });
658
+ ```
659
+ <a name="module_@onlineapps/conn-base-cache..CacheConfig"></a>
660
+
661
+ ### @onlineapps/conn-base-cache~CacheConfig : <code>Object</code>
662
+ **Kind**: inner typedef of [<code>@onlineapps/conn-base-cache</code>](#module_@onlineapps/conn-base-cache)
663
+ **Properties**
664
+
665
+ | Name | Type | Default | Description |
666
+ | --- | --- | --- | --- |
667
+ | [host] | <code>string</code> | <code>&quot;&#x27;localhost&#x27;&quot;</code> | Redis host |
668
+ | [port] | <code>number</code> | <code>6379</code> | Redis port |
669
+ | [password] | <code>string</code> | | Redis password |
670
+ | [db] | <code>number</code> | <code>0</code> | Redis database |
671
+ | [defaultTTL] | <code>number</code> | <code>3600</code> | Default TTL in seconds |
672
+ | [namespace] | <code>string</code> | <code>&quot;&#x27;&#x27;&quot;</code> | Key namespace |
673
+ | [maxRetries] | <code>number</code> | <code>3</code> | Max connection retries |
674
+ | [retryDelay] | <code>number</code> | <code>100</code> | Retry delay in ms |
675
+ | [enableOfflineQueue] | <code>boolean</code> | <code>true</code> | Queue commands when disconnected |
676
+ | [lazyConnect] | <code>boolean</code> | <code>false</code> | Delay connection |
677
+
678
+ <a name="module_@onlineapps/conn-base-cache..CacheStats"></a>
679
+
680
+ ### @onlineapps/conn-base-cache~CacheStats : <code>Object</code>
681
+ **Kind**: inner typedef of [<code>@onlineapps/conn-base-cache</code>](#module_@onlineapps/conn-base-cache)
682
+ **Properties**
683
+
684
+ | Name | Type | Description |
685
+ | --- | --- | --- |
686
+ | hits | <code>number</code> | Number of cache hits |
687
+ | misses | <code>number</code> | Number of cache misses |
688
+ | sets | <code>number</code> | Number of set operations |
689
+ | deletes | <code>number</code> | Number of delete operations |
690
+ | errors | <code>number</code> | Number of errors |
691
+ | hitRate | <code>string</code> | Hit rate percentage |
692
+