Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/redis/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何使用StackExchange.Redis向从机写入数据?_Redis_Stackexchange.redis - Fatal编程技术网

如何使用StackExchange.Redis向从机写入数据?

如何使用StackExchange.Redis向从机写入数据?,redis,stackexchange.redis,Redis,Stackexchange.redis,我经常和一对Redis服务器交谈,一个主服务器和一个从服务器。当我对主人不满意时,我就不能给奴隶写信了 我将IServer.allowslavewwrites设置为true,并将两台服务器上的从机只读配置设置设置为否。(信息确认) 当主机仍在客户机的服务器池中(但脱机)时,我得到: 在第一种情况下,它似乎试图与主人交谈,并放弃失败。在第二种情况下,它与从机通信,但无法执行写操作 如何让我的客户机在没有主服务器的情况下写入从属服务器 (另请参见)事实证明,该库是硬编码的,不允许对从机执行写入操作

我经常和一对Redis服务器交谈,一个主服务器和一个从服务器。当我对主人不满意时,我就不能给奴隶写信了

我将
IServer.allowslavewwrites
设置为
true
,并将两台服务器上的
从机只读
配置设置设置为
。(信息确认)

当主机仍在客户机的服务器池中(但脱机)时,我得到:

在第一种情况下,它似乎试图与主人交谈,并放弃失败。在第二种情况下,它与从机通信,但无法执行写操作

如何让我的客户机在没有主服务器的情况下写入从属服务器


(另请参见)

事实证明,该库是硬编码的,不允许对从机执行写入操作

消息的构造函数中(Message.cs,第170行),有以下代码:

bool masterOnly = IsMasterOnly(command);
if (masterOnly) SetMasterOnly();
IsMasterOnly()
为所有写入命令返回
true
SetMasterOnly()
覆盖用户提供的所有主/从标志,以支持
CommandFlags.DemandMaster
。当系统尝试写入从设备时,此标志会触发上面引用的
RedisConnectionException

我不确定为什么会有这种硬编码的覆盖,因为
allowslaveswrites
标志和
slave\u read\u
config值已经可以防止意外的slave写入(请参见
WriteMessageToServer()


无论如何,从Message.cs中删除这些行似乎可以实现预期的操作。

我最近遇到了类似的问题。下面是我如何修复它的:

IConnectionMultiplexer con = ConnectionMultiplexer.Connect("127.0.0.1:6379");
IDatabase db = con.GetDatabase();
db.Execute("ZINTERSTORE", key, 2, first, second, "WEIGHTS", 0, 1);
正如您在上面所看到的
db.Execute
方法就可以实现这一点

这是我的代码:

IServer ser = RedisConn.GetServer("192.168.1.1", 6379);
ser.AllowSlaveWrites = true;
ser.Execute("set",new object[2] { "test",1});

虽然这段代码可以解决这个问题,但如何以及为什么解决这个问题将真正有助于提高您的帖子质量,并可能导致更多的投票。请记住,你是在将来回答读者的问题,而不仅仅是现在提问的人。请在回答中添加解释,并说明适用的限制和假设。
IConnectionMultiplexer con = ConnectionMultiplexer.Connect("127.0.0.1:6379");
IDatabase db = con.GetDatabase();
db.Execute("ZINTERSTORE", key, 2, first, second, "WEIGHTS", 0, 1);
IServer ser = RedisConn.GetServer("192.168.1.1", 6379);
ser.AllowSlaveWrites = true;
ser.Execute("set",new object[2] { "test",1});