2015-06-14 94 views
0

我想弄清楚建立Redis池然後從噴霧路線內呼叫Redis的最佳方法。我想確保我可以使用連接池進行Redis連接。實例化池並在我的噴霧路徑中使用它的最佳方式是什麼?有沒有更好的方法來建立一個可以使用的「全局」池?我應該創建一個演員,並使用它來進行redis調用嗎?我在這裏顯然有點無知。從噴霧路線內呼叫Redis(或其他數據庫)

原油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實例/集羣交互的actor。

最後,你可以給complete一個噴霧路線,給它一個Future。這基本上意味着你的整個管道將是異步和非阻塞的。

注意:Redis仍然是單線程的,我不認爲AFAIK周圍有任何問題。

一般情況下,你應該使用反應駕駛員如果可能的話(例如,SlickReactiveMongo

+0

Soumya感謝所有的信息。我會看看。真的很感謝迴應。 – scarpacci