2012-02-28 15 views
9

Redis veri deposundan belirli bir anahtar üzerinde yoklanacak ve değer belirli bir koşulu karşıladığında bir şey yapacak bir programım var.Redis veri deposu için "tetikleyici" nasıl uygulanır?

Ancak, sanırım periyodik olarak redis üzerinde yoklama oldukça verimsiz, ben redis için bir "tetikleyici" mekanizma olup olmadığını merak ediyorum, değer değiştiğinde ve durumu karşıladığında, tetik çağrılacak. Tetikleyici, bir RPC işlevi veya bir HTTP msg'si veya başka bir şey olabilir, böylece yoklama ve kesme arasındaki fark gibi, daha fazla sorgulamama gerek kalmaz.

Bu mümkün mü?

cevap

13

Sen REDIS ait Pub/Sub özelliğini kullanabilirsiniz. Açıkladığınız gibi şartların gereği tam olarak ihtiyacın olan şey bu.

Temel olarak, bir "kanala" ilişkin SUBSCRIBE ve uygulamanızın diğer kısmı (PUBLISH) o kanala değiştirilen değeri yazar. Aboneniz (tüketici, değişim hakkında bilmek isteyen müşteri) neredeyse gerçek zamanlı olarak haberdar edilecektir.

+1

Cevabınız için teşekkür ederiz. Redis'in Pub/Sub özelliklerinin belgelerini okudum, ancak bir değer değiştiğinde nasıl tetikleneceğini anlamıyorum. "Pub" eylemini kim yapacak? Değeri yoklamadan, "Pub" eylemini nasıl tetiklersiniz? – ciphor

+0

Değerleri yazan istemci, değerlerin değiştiğini yayınlamalıdır. –

+0

@ciphor, sorunuzu anlıyorsanız, uygulama mantığınızı değiştirmektir, bu yüzden değerinizi "düz" bir redis anahtarına yazmak yerine (veya ek olarak), her bir aboneyi (böylece her bir kanalın) Tabii biri olabilir) hemen bilgilendirilir. –

0

Pub/Sub'ı kullanabiliyorsanız, bu en iyisidir. Herhangi bir nedenle işe yaramazsa, sunucunun aldığı her komutu size gönderecek olan (performansa etki eden) MONITOR komutunu da kullanabilirsiniz. Muhtemelen iyi bir fikir değil.

Özellikle listeler için, yeni bir öğe bir listeden pop duruma gelene kadar bağlantıyı engeller BLPOP var.

İlgili konular