var Redis = require('ioredis'); //导入 安装好的 redis. npm i ioredis --save var { db_config } = require('../../config/config.js') // 导入位置文件 const logger = require('../logger') const utils = require('../utils') //redis 服务启动 /usr/local/bin/redis-server /usr/local/etc/redis.conf var port = db_config.redis.PORT var host = db_config.redis.HOST var username = db_config.redis.USERNAME var password = db_config.redis.PASSWORD var REDIS_INSTANCE; // username: username, // password: password, // logger.log('host , post', host, port, process.env.NODE_ENV) var opts; if (process.env.NODE_ENV == 'test') { opts = { port: port, host: host, connectTimeout: 10000, } REDIS_INSTANCE = new Redis.Cluster([opts]); } else if (process.env.NODE_ENV == 'dev') { opts = { port: port, host: host, // password: passwordd } // var new_opts = "redis://"+password+"@"+host+":"+port+"/0" // "redis://:authpassword@127.0.0.1:6380/4" // REDIS_INSTANCE = new Redis(opts); REDIS_INSTANCE = new Redis.Cluster([opts]); // REDIS_INSTANCE=new Redis.Cluster([opts]); } else if (process.env.NODE_ENV == 'prd') { opts = { port: port, host: host, connectTimeout: 10000, } REDIS_INSTANCE = new Redis.Cluster([opts]); } REDIS_INSTANCE.on('connect', () => { logger.log('connected to redis') }) REDIS_INSTANCE.on('error', function (err) { logger.log('redis Error ', err); }); function redis_set(key, value) { logger.log("redis set=", key, value); try { REDIS_INSTANCE.set(key, value); } catch (error) { logger.error('redis_set error:', key, value, error) return null; } } function redis_push(key, value) { logger.log("redis_push=", key, value); try { REDIS_INSTANCE.rpush(key, value); } catch (error) { logger.error('redis_push error:', key, value, error) return null; } } function redis_pop(key) { logger.log("redis_pop=", key); try { return REDIS_INSTANCE.lpop(key); } catch (error) { logger.error('redis_pop error:', key, error) return null; } } async function redis_get(key) { logger.log("redis get=", key); try { return await REDIS_INSTANCE.get(key); } catch (error) { logger.error('redis_get error:', key, error) return null; } } function formatRedisKey(key, chain, append) { logger.info('formatRedisKey', key, chain, append) var newKey = key + append if (append == null) { newKey = key } if (chain != null) { var chainKey = utils.getRedisKeyFromChain(chain) if (chainKey != null) { switch (key) { case 'TOKENPRICE': case 'TOKENPRICE_TEST': newKey = key + chainKey break case 'LAST_BNB_PRICE': case 'LAST_TOKEN_PRICE': newKey = key + chainKey break case 'REDIS_ERC20_CONTRACT_DECIMALS': if (append != null) { newKey = key + chainKey + '_'+append // newKey = key + '_' + append } break } } } return newKey } async function readAppendRedis(key, chain, append) { var newKey = formatRedisKey(key, chain, append) return await readRedis(newKey) } async function writeAppendRedis(key, chain, append, value) { var newKey = formatRedisKey(key, chain, append) return await redis_set(newKey, value) } /** * 同步 * * @param {*} key * @returns */ async function readRedis(key) { return new Promise((resolve) => { // REDIS_INSTANCE.get(key) redis_get(key) .then(result => { console.log("redis_get=", result); // Prints "value" resolve(result); }).catch(e => { console.log("readRedis key error=", key, e); // Prints "error" }); }) } module.exports = { redis_set, redis_push, redis_pop, redis_get, readRedis, readAppendRedis, writeAppendRedis, }