Category-Aware Semantic Caching for Heterogeneous LLM Workloads