Подключиться к кластеру Redis в R - PullRequest
0 голосов
/ 01 ноября 2018

Предположим, что было несколько хостов и портов сервера Redis, например

10.0.1.1: 6381

10.0.1.1: 6382

10.0.1.2: 6381

10.0.1.2: 6382

как я могу настроить redux::hiredis()?

У меня есть Google, но я не могу найти решение. И я заметил, что в параметре db функции redis_config есть примечание «Не использовать в контексте кластеризации redis». Поэтому мне было интересно, что это был способ подключения к кластеру. Кроме того, я также попытался передать redis://10.0.1.1:6381,10.0.1.1:6382,10.0.1.2:6381,10.0.1.2:6382 параметру url, но все равно не получилось.

Есть предложения? Или вы предложите другой пакет?

1 Ответ

0 голосов
/ 01 ноября 2018

Мое первоначальное решение - написать функцию, указывающую на правильный узел на основе сообщения об ошибке.

check_redis <- function(key = "P10000", host = "10.0.1.1", port = 6381) {
  r <- redux::hiredis(host = host, port = port)
  status <- tryCatch(
    {
      r$EXISTS(key = key)
    },
    error = function(e){
      address <- str_match(e$message, 
                           "[0-9]+.[0-9]+.[0-9]+.[0-9]+:[0-9]+")
      host <- str_split(address, ":", simplify = T)[1]
      port <- str_split(address, ":", simplify = T)[2]
      return(list(host = host, port = port))
    }
  )
  if (is.list(status)) {
    r <- redux::hiredis(host = status$host, port = status$port)
  } 
  return(r)
}

Это может помочь направить на правильный узел, но это решение не является ни элегантным, ни эффективным. Поэтому, пожалуйста, сообщите.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...