node-caching-mysql-connector-with-redis
v2.8.0
Published
MySQL caching connector with Redis, auto key generation, auto invalidation, transaction support, and TypeScript
Maintainers
Readme
MySQL Redis Cache Connector
MySQL + Redis caching with production-grade resilience. Zero config.
Install
npm install node-caching-mysql-connector-with-redisSetup
# .env
DB_HOST=localhost
DB_USERNAME=root
DB_PASSWORD=secret
DB_NAME=mydb
REDIS_SERVER=localhost
REDIS_PORT=6379
CORE_AUTO_FEATURES=trueUsage
const { getCacheQuery, QuaryCache, withTransaction, isRedisConnected } = require('node-caching-mysql-connector-with-redis');
// Read (auto-cached)
const users = await getCacheQuery('SELECT * FROM users WHERE id = ?', [123]);
// Write (auto cache invalidation)
await QuaryCache('INSERT INTO users (name) VALUES (?)', ['Ali']);
// Transaction (auto commit/rollback)
await withTransaction(async (tx) => {
await tx.query('INSERT INTO orders...', [data]);
await tx.query('UPDATE products...', [data]);
});
// Health check
app.get('/health', (req, res) => {
res.json({ redis: isRedisConnected() });
});API
| Function | Description |
|----------|-------------|
| getCacheQuery(sql, params) | Cached read |
| QuaryCache(sql, params) | Write + invalidate cache |
| withTransaction(fn) | Auto commit/rollback |
| getCacheQueryPagination(sql, params, key, page, size) | Paginated query |
| bulkInsert(table, records, options) | Bulk insert |
| getCacheQueryWithTimeout(sql, params, key, options) | Query with timeout protection |
| isRedisConnected() | Redis health check |
| getPoolStats() | MySQL pool statistics |
| closeConnections() | Graceful shutdown |
Resilience
The package is designed for production environments where failures are expected:
Redis
- Unlimited reconnection with exponential backoff + jitter
- Graceful degradation — reads return
[], writes return data without caching - No crashes, no unhandled errors during Redis outages
SCANinstead ofKEYS(cluster-safe)
MySQL
- Connection pool with auto-reconnection (mysql2)
- Retry with exponential backoff on connection errors
- Transaction atomicity preserved during crashes (auto-rollback)
- Query timeout protection
Tested against 18 chaos scenarios including: Redis/MySQL kill during operations, rapid flapping, 30s outages, network partitions, connection pool exhaustion, thundering herd (200 concurrent), bulk write crashes, concurrent transaction kills, and double failure (Redis + MySQL both down).
Config
# Required
DB_HOST, DB_USERNAME, DB_NAME, REDIS_SERVER
# Optional
DB_PASSWORD, DB_PORT=3306, REDIS_PORT=6379, REDIS_PASSWORD
DB_CONNECTION_LIMIT=151, REDIS_VHOST=namespace
CORE_AUTO_FEATURES=true, REDIS_ENABLED=true
REDIS_WAIT_TIMEOUT=10000, DB_CONNECT_TIMEOUT=10000Use Cases
| Scenario | Guide | |----------|-------| | E-Commerce | docs/USE-CASE-ECOMMERCE.md | | Multi-Tenant SaaS | docs/USE-CASE-SAAS.md | | Real-Time Apps | docs/USE-CASE-REALTIME.md | | Bulk Operations | docs/USE-CASE-BULK.md |
Docs
License
MIT
