I'm newbie to Magento 2.
What is the best way to do caching?
Should we use external 3rd party service for it or use default one.
I have more than 1 million SKU's.
Welcome to Magento SE!
While not directly answering your question, I have a similar write up on some tuning/caching options for Magento 1.x, while not all applies but some tools still relevant:
The best approach is to start at the lower points of the stack and optimize up to the frontend of Magento.
At this point when fully exhausted optimizing the server stack, code and services then look to caching. The Varnish implementation in Magento 2.x by default along with Redis as a cache/session storage should handle 50k.
A few links around performance to help.