AOF olmadan çarpışmadan sonra Redis'te setlerin tutarlılığını korumak mümkün mü?

Redis'e yeni sayılır.

Varsayımsal ayar/durum: Redis'in her 10 dakikada bir anlık görüntü aldığını varsayalım. AOF kapalı. Gönderilerin kimliklerini tutan "gönderiler" adlı bir kümeniz var. Ayrıca, MySQL tablonuzun mesajların kimliklerini saklı tutuyorsunuz.

  1. MySQL ve Redis'te toplam 2 posta kimliği var
  2. Redis bir anlık görüntü yapıyor
  3. Kullanıcı yeni gönderi oluşturuyor - şimdi Redis'in 3 kimliği bulunuyor ve MySQL var
  4. Fakat sonra Redis çöküyor ya da öldürülüyor
  5. Yeniden başlatıldığında, Redis artık 2 kimliğe sahipken MySQL'in 3 tane var

Redis verilerinin tutarsız olduğunu nasıl anlıyorsunuz? Okuduğum kadarıyla, AOF daha fazla sorun çıkarır ve mükemmel değildir. Kalıcı kümelerin daha basit/daha zarif bir çözümü var mı?

4
“Ama sonra Redis çöker ya da öldürülür” ... eğer öldürülürse (zorla öldürmezse ya da öldürmezse -9), çıkmadan önce bir tasarruf yapar.
katma yazar Carl Zulauf, kaynak
Ah bunu bilmiyordum, sanırım akıllıca. Bahşiş için teşekkürler.
katma yazar Jon Derring, kaynak

2 cevap

Burada ne kadar veri var? Çok fazla değilse, Redis'teki tüm verileri MySQL veritabanınızdan yeniden yükleyen bir işleminiz olabilir. Güzel olan şey, tüm verilerinizi 10 dakikalık yedekleme deposundan Redis'e yükleyebilmeniz ve daha sonra Redis'te anahtar ile her şeyin anahtarının üzerine yazmanızdır. Eğer zaten varsa, o zaman harika, değilse, o zaman ekler.

Ne yazık ki, iki sistem arasında eşzamanlılık oluşturmak için bazı büyük işler olmadan onları tutarlı tutamayacaksınız. AOF o kadar da kötü değil. Denemelisin. O zaman bile, tutarlılık konusunda endişelenmelisin.

2
katma
Vay, tamam. Kazadan sonra her seferinde MySQL'ten yeniden okuma yapmayı düşündüm, ama belki de daha iyi bir çözüm olduğunu düşündüm (MySQL'den seçmekten kaçınmaya çalışıyordum). AOF'yi denemedim, ancak çoğu blog yazısı bir nedenden dolayı pek çok olumlu şey söylemiyor. Sanırım sorun bu kadar basit değil. Her iki yönde yardım ettiğiniz için teşekkürler. Btw, veri-bilge sanırım o kadar değil.
katma yazar Jon Derring, kaynak

Başka bir sunucuda çalışan bir köle örneği kullanmakta başarılı olduğum bir çözüm. Slave'larla senkronizasyon engellenmiyor, bu yüzden son komutu kaybedebilme şansınız var ya da master çökerse, ama pratikte bu oldukça olası değil. Ayrıca artıklık için birden fazla köle de sahip olabilirsiniz.

Sonuç olarak, master'ınız artık ANY disk G/Ç'sini kullanmaz ve snapshotting tarafından kullanılan bir işlem çatalı için ek bir hafıza olmaz. Master aşağıya indiğinde, ana slave ünitenizi geçici master'inizden alarak geçici olarak slave'lerden birini master'a (en sevdiğim redis komutunu kullanarak: SLAVEOF NO ONE kullanarak) veriyi geri yükleyebilirsiniz. senkronizasyon tamamlandıktan sonra master/slave rollerini orijinal konfigürasyonlarına geri yükler.

1
katma
İlginç ... Bununla deney yapmalıyım. Öneri için teşekkürler.
katma yazar Jon Derring, kaynak