Does get_terms() use any sort of caching on its query?

User gmazzap has a good explanation of Object Cache you may want to read over.

If we take a look at get_terms() we can see it creates a new WP_Term_Query() and that classes get_terms() is where the potential caching happens. Line 666 specifically. Just a little further down we can see if it test if a cache exists.

So the caching will only last a page load to ensure that duplicate queries don’t bog down the database with multiple calls. The filters will attempt to use a cache and if it can’t find it ( unlikely ) it will create one for future use down the page load line.