Search code examples
redispublish-subscribe

Why PUBLISH command in redis slave causes no error?


I have a redis master-slave setup and the configuration of the slave is set to slave_read_only:1, but when I enter a PUBLISH command on the slave node it does not fail. I would expect an error, but it just takes the command and nothing else happens. The message is not propagated to the master either.

The question is, why is that? Did I mis-configure redis? Is that a feature? To what purpose? Or is it just a bug?

The problem arises in a setup where automatic failover occurs. A master may become a slave and clients of that slave may publish messages without realizing that it is no master any more. Do I have to check before each message is sent if the redis node is still master?

I use redis 3.0.5


Solution

  • You didn't misconfigure - this is the defined behavior as PUBLISH isn't considered a write command.

    Also note, that when replicating published events are replicated from master to slaves (downstream, as usual), so if you're publishing to a slave only clients connected to it or to its slaves and subscribed to the relevant channel will get the message.