The cache key allows having multiple caches that use the same endpoint
(for instance, rpc.get_service_nodes for all-SNs versus single SN).
Non-caching requests still use a cached value if present, but don't
store it in the cache if they have to make an actual request.
Also delays creating the lmq instance until get_connection() is called,
which seems pretty much required if using multiple threads/processes as
we need each process to have its own connection.