Redis, gelişmiş bir anahtar-değer veritabanıdır. Memcached'e benzer ama veri kalıcı olabiliyor ve veri türleri zengin. Dizilerle, bağlı listeler, setler ve sıralı koleksiyonlar vardır. Sunucu tarafında koleksiyonların toplanması, kesişmesi ve tamamlayıcı (farkının) hesaplanmasını destekler ve ayrıca çeşitli sıralama fonksiyonlarını destekler. Yani Redis aynı zamanda bir veri yapısı sunucusu olarak da görülebilir. Tüm Redis verileri bellekte saklanır ve zaman zaman diske asenkron olarak saklanır (buna "yarı-kalıcı mod" denir); Ayrıca her veri değişikliğini Sadece Ekleyen Dosyaya (AOF) yazabilirsiniz (buna "tam kalıcı mod" denir). İlk yöntem filesnapshotting'dir: Varsayılan redis verileri diske snapshot şeklinde (ikili dosya, dump.rdb, bu dosya adı belirtilebilir) şeklinde tutar ve yapılandırma dosyasındaki format şöyledir: N M kaydetmek, en az M değişiklik olursa N saniye içinde redis'in diske snapshot alacağı anlamına gelir. Tabii ki, anlık görüntüler almak için el ile save veya bgsave (asenkron) yapabiliriz.
İşte nasıl çalıştığına dair kısa bir giriş: Redis ısrar etmek zorunda olduğunda, Redis bir çocuk süreci çatallar; Alt süreç, verileri diskteki geçici bir RDB dosyasına yazar; Alt süreç geçici dosyayı yazmayı bitirdiğinde, orijinal RDB'nin yerini alır ve bu da yazma üzerine kopyalama avantajına sahiptir
Ayrıca bir süreklilik yöntemi vardır: Sadece Ekler:filesnapshotting yöntemi Redis anormal şekilde ölüyse, son veriler kaybolur (kayıp veri miktarı kayıt politikanızın yapılandırmasına bağlıdır), bu yüzden en büyük dezavantajı budur; iş hacmi büyükse, kayıp veri çok fazladır. Sadece ekleyip yöntemi tüm veri kaybını sağlayabilir, ancak Redis'in performansı daha kötü. AOF süreç boyunca devam edebilir, sadece yapılandırma dosyasında açılması gerekir (varsayılan olarak yok), sadece eklenebilir. AOF etkinleştirildikten sonra, redis veriyi değiştirmek için bir komut çalıştırdığında, bu dosya aof dosyasına eklenir ve redis yeniden başlatıldığında, AOF dosyası "tekrar oynatma" için okunur ve redis kapanmadan önceki son ana geri döner.
LOG Yeniden Yazma AOF dosyası veri değiştirildikçe giderek büyür, bu kayıtların çoğu bir anahtarda değişir. Bu nedenle, redis'in ilginç bir özelliği vardır: istemci tarafı operasyonunu etkilemeden AOF dosyasını arka planda yeniden oluşturmak. BGREWRITEAOF komutunu herhangi bir zamanda çalıştırmak, mevcut bellekteki en kısa komut dizisini diske yazar ve bu komutlar, gereksiz değişiklikler (durum değişiklikleri, sayaç değişiklikleri vb.) olmadan mevcut veri durumunu tamamen oluşturabilir, böylece AOF dosyasının boyutu küçüler. Bu yüzden OF kullanırken Redis BGREWRITEAOF da kullanmanızı öneriyor.
AOF dosyasını yenilemenin üç yolu vardır, yapılandırma parametresine appendfsync bakınız: appendfsync her değişiklik komutu gönderildiğinde fsync'i AOF dosyasına yönlendirmek için çağırır, bu çok, çok yavaş ama aynı zamanda çok güvenlidir; appendfsync everysec, AOF dosyasına hızlıca ulaşmak için her saniye fsync çağırır, ancak bir saniye içinde veri kaybedebilir; appendfsync no işletim sistemine yenilemeye ihtiyaç duyuyor, redis en hızlı olan OV'yu aktif olarak yenilemez, ancak güvenlik zayıf. Saniyede yenileme varsayılan olarak önerilir, böylece hem hız hem de güvenlik dikkate alınır.
AOF sistem nedenlerinden dolayı bozulmuş olabilir, Redis artık bu OF OV'yu yükleyemiyor, aşağıdaki adımları takip ederek düzeltebilirsiniz: Önce AOF dosyasının yedeğini alın ve başka bir yere kopyalayın; Orijinal OF dosyasını düzelt, çalıştır: $redis-check-aof –fix; Dosyaların onarımdan önce ve sonra tutarsız olduğu yerleri görmek için diff –u komutunu kullanabilirsiniz. Redis servisini yeniden başlat.
LOG Rewrite nasıl çalışır: Aynı yöntem copy-on-write kullanır: önce Redis bir alt süreci çatallayacak; Alt süreç, en son AOF'ı geçici bir dosyaya yazar; Ana süreç, en son yürütülen değişiklikleri kademeli olarak belleğe yazar (bu anda eski AOF hâlâ yazılır ve başarısız olursa yeniden yazmak güvenlidir); Child süreç geçici dosyayı yeniden yazmayı tamamladığında, ana süreç bir sinyal alır ve önceki artımlı değişiklikleri geçici dosyanın sonuna kadar belleğe yazar. Redis eski OF dosyasının adını değiştiriyor, geçici dosyayı yeniden adlandırıyor ve yeni OF'ye yazmaya başlıyor.
Son olarak, her ihtimale karşı (makine çökerse veya disk çöker), filenapshotting veya sadece ekleyici ile oluşturulan *rdb *.aof dosyasını düzenli olarak uzak makineye yedeklemeyi unutmayın. Her yarım saatte bir bir crontab kullanarak SCP yapıyorum. Redis'in master-slave fonksiyonunu kullanmadım, çünkü yarım saatlik yedekleme yeterli olmalı ve master-slave varsa makine için biraz boşa harcama olduğunu düşünüyorum. Bu nihayetinde uygulamaya bağlıdır.
|