node-caching-mysql-connector-with-redis v2.4.0
NODE CACHING MYSQL CONNECTOR WITH REDIS
MySQL bağlantılarınızı yönetirken ve sorgu sonuçlarını Redis ile önbelleğe alarak uygulamanızın performansını artıran bir Node.js kütüphanesi.
Özellikler
- MySQL sorgu sonuçlarının Redis'te otomatik önbelleğe alınması
- Sayfalama desteği ile önbellekleme
- Veri güncellemeleri için önbellek temizleme
- Anahtar çakışmalarını önlemek için isim alanı (namespace) desteği
- Parametreli sorgular ile SQL injection koruması
Kurulum
npm install node-caching-mysql-connector-with-redisYapılandırma
Ortam değişkenlerinizi .env dosyasında ayarlayın:
# MySQL Veritabanı Değişkenleri
DB_HOST="localhost"
DB_USERNAME="root"
DB_PASSWORD=""
DB_NAME="veritabani_adiniz"
DB_PORT="3306"
TIMEZONE="+00:00" # Varsayılan zaman dilimi
# Redis Değişkenleri
REDIS_SERVER="localhost"
REDIS_PORT="6379"
REDIS_PASSWORD=""
REDIS_VHOST="uygulamam" # İsteğe bağlı Redis anahtar önekiKullanım Kılavuzu
Temel Önbellekli Sorgu
getCacheQuery fonksiyonu, SQL sorgularını çalıştırır ve sonuçları Redis'te önbelleğe alarak sonraki çağrılarda performansı artırır.
Fonksiyon İmzası
getCacheQuery(sql, parameters, cacheName)sql: Parametreli yer tutucular (?) içeren SQL sorgu metniparameters: Yer tutucuları değiştirecek parametre değerlerinin dizisicacheName: Önbellekteki sonuç için benzersiz tanımlayıcı
Örnek
const { getCacheQuery } = require('mysql-redis-connector');
// Belirli bir şirketin tüm kullanıcılarını getir
getCacheQuery(
"SELECT * FROM users WHERE company_id = ?",
[companyId],
`userlist-${companyId}`
)
.then(data => {
// Veriyi işle
console.log(data);
})
.catch(err => {
console.error(err);
});Sayfalama ile Önbellekli Sorgu
getCacheQueryPagination fonksiyonu, sorgu sonuçlarının otomatik önbellekleme ile sayfalanmasını sağlar.
Fonksiyon İmzası
getCacheQueryPagination(sql, parameters, cacheName, page, pageSize = 30)sql: Parametreli yer tutucular (?) içeren SQL sorgu metniparameters: Yer tutucuları değiştirecek parametre değerlerinin dizisicacheName: Önbellekteki sonuç için benzersiz tanımlayıcıpage: Sayfa numarası (0 tabanlı indeks)pageSize: Sayfa başına öğe sayısı (varsayılan: 30)
Örnek
const { getCacheQueryPagination } = require('mysql-redis-connector');
// Ürünlerin sayfalanmış listesini getir
getCacheQueryPagination(
"SELECT * FROM products WHERE category = ? ORDER BY created_at DESC",
[categoryId],
`products-category-${categoryId}-page-${page}`,
page,
25 // Sayfa başına 25 öğe
)
.then(result => {
// Şunları içeren bir nesne döndürür:
// - totalCount: toplam kayıt sayısı
// - pageCount: toplam sayfa sayısı
// - detail: istenen sayfa için kayıt dizisi
console.log(`Gösterilen sayfa: ${page + 1} / ${result.pageCount}`);
console.log(`Toplam kayıt: ${result.totalCount}`);
console.log(result.detail);
})
.catch(err => {
console.error(err);
});Veri Güncelleme ve Önbellek Temizleme
QuaryCache fonksiyonu, yazma işlemlerini (INSERT, UPDATE, DELETE) gerçekleştirir ve ilgili önbellek girişlerini geçersiz kılar.
Fonksiyon İmzası
QuaryCache(sql, parameters, resetCacheName = null)sql: Parametreli yer tutucular (?) içeren SQL sorgu metniparameters: Yer tutucuları değiştirecek parametre değerlerinin dizisiresetCacheName: Geçersiz kılınacak önbellek anahtarı deseni (isteğe bağlı)
Örnek
const { QuaryCache } = require('mysql-redis-connector');
// Yeni bir kullanıcı ekle ve kullanıcı listesi önbelleğini temizle
QuaryCache(
"INSERT INTO users SET fullname = ?, email = ?, password = ?, company_id = ?",
[fullname, email, hashedPassword, companyId],
`userlist-${companyId}` // Bu desen ile eşleşen tüm anahtarları temizler
)
.then(result => {
console.log(`Kullanıcı eklendi, ID: ${result.insertId}`);
})
.catch(err => {
console.error(err);
});Redis İsim Alanı (Namespace)
Kütüphane, REDIS_VHOST ortam değişkeni aracılığıyla Redis anahtar isim alanını destekler. Bu, birden fazla uygulama aynı Redis örneğini paylaştığında anahtar çakışmalarını önler.
REDIS_VHOST ayarlandığında, tüm anahtarlar otomatik olarak {REDIS_VHOST}: öneki ile başlar. Örneğin, REDIS_VHOST=uygulamam ile userlist-123 adlı bir önbellek anahtarı, Redis'te uygulamam:userlist-123 olarak saklanır.
Hata Yönetimi
Tüm fonksiyonlar Promise döndürür, böylece .then()/.catch() ile Promise zincirleri veya async/await sözdizimini kullanabilirsiniz:
// async/await kullanımı
async function getUserData(companyId) {
try {
const users = await getCacheQuery(
"SELECT * FROM users WHERE company_id = ?",
[companyId],
`userlist-${companyId}`
);
return users;
} catch (error) {
console.error("Kullanıcılar getirilemedi:", error);
throw error;
}
}En İyi Uygulamalar
Anlamlı Önbellek Anahtarları Seçin: Önbellek anahtarlarınızı benzersiz kılmak için tanımlayıcılar ekleyin (örn.
products-category-${categoryId}).Uygun Son Kullanma Süreleri Ayarlayın: Varsayılan önbellek süresi 40.000 saniyedir (~11 saat). Veri değişkenliğinize göre bu süreyi ayarlayın.
Önbellek Temizlemeyi Yönetin: Veri değişikliklerinden sonra, önbellekteki verileri güncel tutmak için uygun önbellek desenleriyle
QuaryCachefonksiyonunu çağırın.İsim Alanlarını Kullanın: Paylaşılan Redis ortamlarında anahtar çakışmalarını önlemek için
REDIS_VHOSTortam değişkenini ayarlayın.Her Zaman Parametreli Sorgular Kullanın: SQL enjeksiyon saldırılarını önlemek için değerleri asla doğrudan SQL metinlerine birleştirmeyin.
Lisans
MIT
Gelecek Yol Haritası
Kütüphanenin gelecek versiyonlarında planlanan geliştirmeler:
Redis Cluster Desteği: Yüksek kullanılabilirlik ve ölçeklenebilirlik için Redis Cluster desteği.
Otomatik Önbellek Yenileme: Belirli bir süre sonra otomatik olarak önbelleği arka planda yenileme özelliği.
İzleme ve Metrikler: Önbellek isabet oranı, sorgu performansı ve Redis durum metrikleri için izleme araçları.
Dağıtılmış Kilit Mekanizması: Eşzamanlı istemciler arasında veri tutarlılığını sağlamak için dağıtılmış kilit desteği.
Şema Değişikliği Yönetimi: Veritabanı şeması değişikliklerinde önbelleği otomatik temizleme mekanizması.
TypeScript Desteği: Tam TypeScript tiplerini ve desteklerini içeren TypeScript sürümü.
İnce Ayarlı Önbellek Stratejileri: LRU, TTL, FIFO gibi farklı önbellekleme stratejileri arasında seçim yapma olanağı.
Olay Tabanlı Önbellek Geçersiz Kılma: Uygulama olaylarına dayalı otomatik önbellek geçersiz kılma sistemi.
GitHub Deposu
https://github.com/hayatialikeles/NODE-CACHING-MYSQL-CONNECTOR-WITH-REDIS