Redis发布到一个客户

时间:2015-07-24 23:44:25

标签: redis

是否可以仅向订阅频道的一个客户发布消息?我知道如何获取地址(客户列表)。是否可以获取地址并仅发布给该客户?

2 个答案:

答案 0 :(得分:2)

在Redis中,您发布到频道,而不是订阅者。 所以唯一的方法应该是每个客户端有一个通道。 您可以使用一个公共通道来共享地址,然后将地址用作通道名称。

http://redis.io/topics/pubsub

例如,使用C#和StackExchange.Redis库:

//SERVER
var cnn = ConnectionMultiplexer.Connect("localhost");
var sub = cnn.GetSubscriber();
sub.Subscribe("common", (channel, value) =>
{
    Console.WriteLine("SERVER Received in common: {0}", value);
    sub.Publish("channel:" + value, "private from server to " + value);
});

//CLIENT
var cnn = ConnectionMultiplexer.Connect("localhost");
var address = "client1";
var sub = cnn.GetSubscriber();
sub.Subscribe("channel:" + address, (channel, value) =>
{
    Console.WriteLine("Private: {0}", value);

});
sub.Publish("common", address);

答案 1 :(得分:0)

另一个解决方案:我试图做的是让所有订阅者都听,但只有一个处理消息。我这样做的方法是在redis中创建一个堆栈,并且都订阅了一个密钥的列表命令通知。所以我会在键上输入一个新值,订阅者会得到键空间通知,而LPOP的第一个值会处理它。