in storehaus-redis/src/main/scala/com/twitter/storehaus/redis/RedisSortedSetStore.scala [36:58]
def semigroup: Semigroup[Seq[(Buf, Double)]] =
implicitly[Semigroup[Seq[(Buf, Double)]]]
/** Returns the whole set as a tuple of seq of (member, score).
* An empty set is represented as None. */
override def get(k: Buf): Future[Option[Seq[(Buf, Double)]]] =
client.zRange(k, 0L, -1L, true).map(
_.left.toOption.map( _.asTuples).filter(_.nonEmpty)
)
/** Replaces or deletes the whole set. Setting the set effectivly results
* in a delete of the previous sets key and multiple calls to zAdd for each member. */
override def put(kv: (Buf, Option[Seq[(Buf, Double)]])): Future[Unit] =
kv match {
case (set, Some(scorings)) =>
client.dels(Seq(set)).flatMap { _ =>
Future.collect(members.multiPut(scorings.map {
case (member, score) => ((set, member), Some(score))
}.toMap).values.toSeq).unit
}
case (set, None) =>
client.dels(Seq(set)).unit
}