Introduction
ts-cache is a powerful TypeScript in-memory caching library designed to improve application performance by storing frequently accessed data in memory. This modern TypeScript port of the popular node-cache library provides a clean, type-safe API with enhanced features optimized for modern JavaScript/TypeScript applications.
Features
🚀 High Performance
- Optimized for speed with minimal overhead
- Smart memory management with adjustable limits
- Configurable time-to-live (TTL) for cached items
- Automatic cleanup of expired items
🛡️ Type Safety
- Full TypeScript support with comprehensive type definitions
- Generic methods for type-safe value retrieval
- IDE autocompletion for better developer experience
- Compile-time checking
🔄 Flexible API
- Simple get/set API for basic caching needs
- Fetch API for compute-if-absent pattern
- Multiple key operations (mget/mset/del)
- TTL management for fine-grained expiration control
📊 Monitoring & Events
- Built-in statistics for cache performance monitoring
- Event emitter for cache operations (set, del, expired, etc.)
- Memory usage estimation
- Comprehensive error handling
🔧 Configurable
- Customizable TTL for each cached item
- Memory limits with max keys setting
- Clone behavior configuration
- Automatic cleanup interval adjustment
Key Considerations
- The library uses ES modules for tree shaking
- TypeScript declarations enable great IDE integration
- Event-based architecture for reactive applications
- Minimal dependencies (only requires
ts-clone
package)
Performance Optimization
ts-cache is optimized for:
- Memory Efficiency: Customizable size estimators for different data types
- Speed: Minimal overhead for cache operations
- Configurability: Adjust settings based on your specific use case
- Monitoring: Track hits, misses, and other stats to optimize usage
Use Cases
ts-cache is perfect for:
- API response caching
- Expensive computation results caching
- Database query result caching
- Session data storage
- Application configuration caching
- Rate limiting implementation
- Memoization of function results
Real-World Example
Here's a quick example of using ts-cache to improve API response times:
import { cache } from 'ts-cache'
import { fetchUserData } from './api'
// Function that uses cache for API responses
async function getUserData(userId: string) {
// Check if data is already in cache
const cachedData = cache.get<UserData>(userId)
if (cachedData) {
return cachedData
}
// If not in cache, fetch from API
const userData = await fetchUserData(userId)
// Store in cache for 5 minutes
cache.set(userId, userData, 300)
return userData
}
// Or using the built-in fetch method
async function getUserDataWithFetch(userId: string) {
return cache.fetch(userId, 300, async () => {
return await fetchUserData(userId)
})
}
Why ts-cache?
- Modern: Built with TypeScript for modern applications
- Type-Safe: Full type safety with generics for better developer experience
- Lightweight: Minimal dependencies and small footprint
- Flexible: Works in Node.js, Bun, and browser environments
- Performant: Optimized for speed and memory efficiency
- Maintained: Regular updates and improvements
Ready to get started? Check out our Installation Guide or dive into the Usage Documentation.
Changelog
Please see our releases page for more information on what has changed recently.
Contributing
Please review the Contributing Guide for details.
Stargazers
Community
For help, discussion about best practices, or any other conversation that would benefit from being searchable:
For casual chit-chat with others using this package:
Join the Stacks Discord Server
Postcardware
Two things are true: Stacks OSS will always stay open-source, and we do love to receive postcards from wherever Stacks is used! 🌍 We also publish them on our website. And thank you, Spatie
Our address: Stacks.js, 12665 Village Ln #2306, Playa Vista, CA 90094
Sponsors
We would like to extend our thanks to the following sponsors for funding Stacks development. If you are interested in becoming a sponsor, please reach out to us.
Credits
License
The MIT License (MIT). Please see LICENSE for more information.
Made with 💙