2015-06-14 3 views
0

Я пытаюсь найти лучший способ создать Redis Pool, а затем совершить звонки в Redis из маршрута Spray. Я хочу, чтобы я мог использовать пул соединений для соединений Redis. Что было бы лучшим способом создать экземпляр бассейна и использовать его в моих маршрутах распыления? Есть ли лучший способ создать «глобальный» пул, который можно использовать? Должен ли я создать актера вместо этого и использовать его для совершения вызовов redis? Я, очевидно, немного невежественна здесь.Вызвать Redis (или другой db) из Spray Route

Сырой Redis Клиент:

object RedisClient { 

    val pool = new JedisPool(new JedisPoolConfig(), "localhost") 

    def getValue(key: String): String= { 

    try{ 
     val jedis = pool.getResource() 

     //returns redis value 
     jedis.get(key) 
    } 
    } 


} 

маршрут, который заканчивается вызовом функции, которая использует клиент REDIS

trait DemoService extends HttpService { 

    val messageApiRouting = 
     path("summary"/Segment/Segment) { (dataset, timeslice) => 
      onComplete(getSummary(dataset, timeslice)) { 
      case Success(value) => complete(s"The result was $value") 
      case Failure(ex) => complete(s"An error occurred: ${ex.getMessage}") 
      } 
     } 

    def getSummary(dataset: String, timeslice: String): Future[String] = Future { 
    val key = dataset + timeslice 
    RedisClient.getValue(key) 
    } 
} 

ответ

2

Насколько я знаю, клиент Jedis не неблокирующий и асинхронный. Таким образом, вы можете не использовать все преимущества использования Spray, если используете блокирующий клиент. Я бы предложил посмотреть на Rediscala.

Во-вторых, я бы делегировал реальное взаимодействие другому актеру, который имеет RedisClient, взаимодействующий с экземпляром/кластером Redis.

Наконец, вы можете complete a Распылительный маршрут, указав Future. Это означает, что весь ваш конвейер будет асинхронным и неблокирующим.

ПРИМЕЧАНИЕ: Redis все еще однопоточный, и я не думаю, что в любом случае AFAIK существует.

В общем, вы должны использовать реактивный драйвер, если это возможно (например, Slick, ReactiveMongo)

+0

Soumya Спасибо за всю информацию. Я посмотрю. Очень ценю ответ. – scarpacci

 Смежные вопросы

  • Нет связанных вопросов^_^