File tree Expand file tree Collapse file tree 2 files changed +29
-0
lines changed
Expand file tree Collapse file tree 2 files changed +29
-0
lines changed Original file line number Diff line number Diff line change @@ -22,6 +22,16 @@ class CacheService extends Service {
2222 const duration = ( Date . now ( ) - t ) ;
2323 logger . debug ( 'Cache' , 'set' , key , ( duration + 'ms' ) . green ) ;
2424 }
25+
26+ async incr ( key , seconds ) {
27+ const { redis, logger } = this . app ;
28+ const t = Date . now ( ) ;
29+ const result = await redis . multi ( ) . incr ( key ) . expire ( key , seconds )
30+ . exec ( ) ;
31+ const duration = ( Date . now ( ) - t ) ;
32+ logger . debug ( 'Cache' , 'set' , key , ( duration + 'ms' ) . green ) ;
33+ return result [ 0 ] [ 1 ] ;
34+ }
2535}
2636
2737module . exports = CacheService ;
Original file line number Diff line number Diff line change @@ -16,4 +16,23 @@ describe('test/app/service/cache.test.js', () => {
1616 const result2 = await ctx . service . cache . get ( 'greet123' ) ;
1717 assert ( result2 === undefined ) ;
1818 } ) ;
19+
20+ it ( 'incr should ok' , async ( ) => {
21+ const ctx = app . mockContext ( ) ;
22+ const key1 = '' + Date . now ( ) ;
23+
24+ let initNumber = await ctx . service . cache . incr ( key1 , 4 ) ;
25+ assert ( initNumber === 1 ) ;
26+ await new Promise ( resolve => setTimeout ( resolve , 2000 ) ) ;
27+ let secondNumber = await ctx . service . cache . incr ( key1 , 1 ) ;
28+ assert ( secondNumber === 2 ) ;
29+
30+ // test expire works
31+ const key2 = '' + Date . now ( ) ;
32+ initNumber = await ctx . service . cache . incr ( key2 , 2 ) ;
33+ assert ( initNumber === 1 ) ;
34+ await new Promise ( resolve => setTimeout ( resolve , 3000 ) ) ;
35+ secondNumber = await ctx . service . cache . incr ( key2 , 1 ) ;
36+ assert ( secondNumber === 1 ) ;
37+ } ) ;
1938} ) ;
You can’t perform that action at this time.
0 commit comments