Improving Storage Performance With Non-Volatile Memory-Based Caching Systems