2016-09-30 27 views
1

我使用Redis作为分布式缓存。我有不同的应用程序只听特定的键。例如: App1听App1。* App2听App2。*等等。Redis通知

而且我的应用程序使用以下方式接收通知: 应用1: “键*APP1” 应用2: “键*APP 2

我需要发只有关于set,del,expired,驱逐事件的通知才是我试图使用notify-keyspace-events“AK”的原因。如果对我工作正常,但在这种情况下的“AK”配置Redis开始发送额外的通知,如“过期”,我不需要。

所以根据文档http://redis.io/topics/notifications我试图实现自定义属性:

通知,密钥空间事件“Ksxe”只发送集,过期和驱逐通知。但事实上在这种情况下,我只收到过期的通知..

问题: 1.为什么我没有收到设置和驱逐的事件?为什么我只收到过期事件? 2.有什么办法让redis只发送del通知吗?

我也尝试过“Ks”,但redis不发送有关设置事件的通知 g $ lshzxe的别名,以便“AKE”字符串表示所有事件。 “Kg $ lshzxe”也无法正常工作。

回答

1

我认为你误解了“s”标志。它与set命令无关。它告诉Redis只发送改变类型类型“redis集”的命令,例如sadd或Redis集类型的键到期。

因此,在您的示例“Ksxe”中,您指示Redis在任何时候发送包含Redis集合的密钥被驱逐或“过期”的通知。 “Ks”选项指示Redis只发送类型“set”被更改的密钥上的通知,而不会使用set命令创建字符串。为了将其翻译成英文,你告诉Redis“告诉我何时'set'类型的密钥过期或被驱逐了。

如果你想创建或使用set命令改变了串的关键时候就知道了,有到期添加到它,设置过期立即删除密钥,或者被驱逐时,你需要自行使用“K $ xeg”。 “g”很重要,因为它可以使用expire命令本身,'$'表示字符串类型。

另请注意,“g”标志将导致“过期”事件,但过期事件将被标记为“过期”,使您能够分辨出差异。如果你不关心在一个密钥上创建TTL,你可以忽略“g”。