2016-01-15 3 views
3

У меня есть конфигурация master-slave с двумя подчиненными и тремя часовыми. Если я попробую команды с командной строкой, все будет в порядке. Но у меня есть некоторые проблемы с настройкой его для C#. Я использую библиотеку StackExchange.Redis. Но я не понимаю, что я должен сделать, чтобы получить/установить ключи от мастера. Должен ли я вручную найти мастера, а затем получить или установить ключи или сделать это автономно? Каков наилучший способ сделать это? Каждый раз, когда я хочу получить/установить ключ, я должен проверить, кто является мастером? На данный момент я сделал только это, и я оставил свой код другим, как это было только с одним мастером.Использование Redis Sentinel от C#

private static string ServiceName = "mymaster"; 
private static string IP { get { return "127.0.0.1"; } } 
private static int Port = 26379; 

public static readonly ConnectionMultiplexer Connection = GetConn(); 
public static readonly IServer Server = Connection.GetServer(IP, Port); 

public static ConnectionMultiplexer GetConn() 
{ 
    try 
    { 
     // create a connection 
     var options = new ConfigurationOptions() 
     { 
      CommandMap = CommandMap.Sentinel, 
      EndPoints = { { IP, Port } }, 
      AllowAdmin = true, 
      TieBreaker = "", 
      ServiceName = ServiceName, 
      SyncTimeout = 5000, 
      AbortOnConnectFail = true, 
      Ssl = false 
     }; 
     var connection = ConnectionMultiplexer.Connect(options, Console.Out); 
     return connection; 
    } 
    catch (Exception ex) 
    { 
     ASLog.LogError(ex, 1); 
     return null; 
    } 
} 

, где у меня есть один из трех Стражей в порту 26379. Извините, но я немного запутался, как использовать это с C#.

ответ

0

Вам не нужно указывать или проверять главный узел, библиотека будет выбирать мастер для операций записи.

В любом случае все методы имеют необязательные параметры CommandFlags, где вы можете указать, где выполнить операцию (DemandMaster, DemandSlave, PreferMaster, PreferSlave).

Например:

var cnn = ConnectionMultiplexer.Connect("localhost:6379"); 
var db = cnn.GetDatabase(); 
db.StringSet("key", "value", null, When.Always, CommandFlags.DemandMaster); 
var value = db.StringGet("key", CommandFlags.PreferSlave); 
+0

когда я пытаюсь использовать 'StringSet' он говорит,' Эта операция была отключена в командной карте и не может быть использована: SETEX' .. – ayasha

+0

У вас есть [ ' rename-command'] (http://redis.io/topics/security#disabling-of-specific-commands) на redis.conf? – thepirat000

+0

нет .. что это? – ayasha