From cb55eb268e00465115d69aaff61ce97b2cdb6fab Mon Sep 17 00:00:00 2001 From: Adhidarma Hadiwinoto <me@adhisimon.org> Date: Tue, 2 Aug 2016 10:16:32 +0700 Subject: [PATCH] lru-cache untuk reverseUrlCache --- neoxmlinutil.js | 19 ++++++++++++++++++- package.json | 1 + 2 files changed, 19 insertions(+), 1 deletion(-) diff --git a/neoxmlinutil.js b/neoxmlinutil.js index ed571fd..c8f5f6a 100644 --- a/neoxmlinutil.js +++ b/neoxmlinutil.js @@ -1,10 +1,13 @@ var oracledb = require('oracledb'); +var LRU = require('lru-cache'); var config = require("./config.json"); var logger = console; var oraCon; +var reverseUrlCache = LRU({max: 30, maxAge: 60 * 1000}); + function init(options) { if (options && options.logger) { logger = options.logger; @@ -37,7 +40,7 @@ function getTransactionIdFromMessage(message) { } } -function getReverseUrl(msisdn, callback) { +function getReverseUrlFromDb(msisdn, callback) { oraCon.execute( "SELECT trim(A.MSISDN) MSISDN, trim(B.REVERSE_URL) REVERSE_URL FROM T_STORE_USER_MSISDN A, T_STORE_USER B WHERE A.STORE_ID = B.STORE_ID AND A.USER_NAME = B.USER_NAME AND B.REVERSE_URL IS NOT NULL AND A.MSISDN = :msisdn", [msisdn], @@ -55,11 +58,25 @@ function getReverseUrl(msisdn, callback) { retval.push(result.rows[i][1]); } + if (retval.length) { + reverseUrlCache.set(msisdn, retval); + } + callback(null, retval); } ); } +function getReverseUrl(msisdn, callback) { + var urls = reverseUrlCache.get(msisdn); + + if (!urls) { + getReverseUrlFromDb(msisdn, callback); + } else { + callback(null, retval); + } +} + function getRequestIdFromResponseMessage(message) { try { var tokens = message.split('.'); diff --git a/package.json b/package.json index 9f2940c..c84697c 100644 --- a/package.json +++ b/package.json @@ -21,6 +21,7 @@ "author": "Adhidarma Hadiwinoto <me@adhisimon.org>", "license": "ISC", "dependencies": { + "lru-cache": "^4.0.1", "oracledb": "^1.9.3", "request": "^2.72.0", "strftime": "^0.9.2", -- 1.9.0