cacheExchangeSymbols = async logger => {
  const cachedExchangeSymbols = await getCachedExchangeSymbols(logger);
  // If there is already cached exchange symbols, don't need to cache again.
  if (
    _.isEmpty(cachedExchangeSymbols) === false &&
    // For backward compatibility, verify the cached value is valid.
    isValidCachedExchangeSymbols(cachedExchangeSymbols) === true
  ) {
    return;
  }

  // Retrieve cached exchange information
  const exchangeInfo = await getCachedExchangeInfo(logger);

  logger.info('Retrieved exchange info from API');

  const { symbols } = exchangeInfo;

  const exchangeSymbols = symbols.reduce((acc, symbol) => {
    // For backward compatibility, MIN_NOTIONAL is deprecated.
    const minNotionalFilter = _.find(symbol.filters, {
      filterType: 'MIN_NOTIONAL'
    });

    // New filter type is NOTIONAL.
    const notionalFilter = _.find(symbol.filters, {
      filterType: 'NOTIONAL'
    });

    acc[symbol.symbol] = {
      symbol: symbol.symbol,
      status: symbol.status,
      quoteAsset: symbol.quoteAsset,
      minNotional: minNotionalFilter
        ? parseFloat(minNotionalFilter.minNotional)
        : parseFloat(notionalFilter.minNotional)
    };

    return acc;
  }, {});

  await cache.hset(
    'trailing-trade-common',
    'exchange-symbols',
    JSON.stringify(exchangeSymbols),
    3600
  );

  logger.info({ exchangeSymbols }, 'Saved exchange symbols to cache');
}
Retreive cached exhcnage symbols.
 If not cached, retrieve exchange info from API and cache it.

@param {*} logger