wp_cache_get without a persistent backend is a request cache

The object cache API is always available and, without a drop-in, discards everything at the end of the request.

$value = wp_cache_get( 'expensive', 'turkerdev' );

if ( false === $value ) {
    $value = turkerdev_compute();
    wp_cache_set( 'expensive', $value, 'turkerdev', 3600 );
}

// with no object-cache.php drop-in, the TTL is ignored and
// the entry lives for one request.

wp_using_ext_object_cache();   // the check that matters

Within a request it is still worth having — the same expensive lookup called from three places runs once — and the code reads as if it caches across requests, which is where the misunderstanding comes from. false being the miss sentinel is the other trap: caching a value that is legitimately false means it is recomputed every time.