Вопрос новичка: я пытаюсь создать один менеджер кэша, который будет расположен между несколькими пользователями кэша (= upstream) и клиентом Redis (downstream), поэтому:
Client A -----> |
| Cache Manager <=====> Redis Connection --(tcp)--
Client B -----> |
Идея состоит в том, чтобыповторно использовать одно соединение с Redis.Я могу отправлять команды SET асинхронно, когда ответы возвращаются от клиента Redis-клиента, как я узнаю, на какой клиент нужно передать ответ?Вот мой метод получения до сих пор:
def receive: PartialFunction[Any, Unit] = {
case Store(key: ByteString, payload: ByteString, metadata: ByeString) => {
// WIP: yes, I could batch these two here
brandoClient ! Request(REDIS_SET, metadata_key(key), metadata)
brandoClient ! Request(REDIS_SET, key, payload)
}
case Some(Ok) => {
???
}
...
}
Я мог бы сделать:
case Store(key: ByteString, payload: ByteString) => {
val future = brandoClient ? Request(REDIS_SET, key, payload)
sender() ! Await.result(future, request_timeout.duration)
}
Но это сделает блок управления кешем.
Другой способ, о котором я могу подумать, - это создать несколько акторов Cache Manager, которые ссылаются на один и тот же клиент Redis ActorRef, чтобы я мог таким образом дедуплицировать ответы.Вот так:
Client A -----> Cache Manager A -----> |
| Redis Connection --(tcp)--
Client B -----> Cache Manager B -----> |
Это единственный способ сделать это?
Спасибо,