Идиоматический Scala клиент для Redis, разработанный и используемый компанией Top10. Это работа в процессе, хотя он используется в продакшне, следует относиться к нему как к экспериментальной версии.
На данный момент этот клиент оборачивает Java Jedis клиента и в некоторых местах это просвечивается. Пришлось исправить Jedis несколькими способами, и исправленные файлы находятся в папке src/main/java
. Когда эти исправления будут приняты и выпущены как новый Jedis, мы сможем удалить их, но это пока не выглядит возможным в ближайшее время.
Размещено в репозиториях Sonatype релизов и предварительных выпусков.
resolvers += "Sonatype OSS Releases" at "http://oss.sonatype.org/content/repositories/releases/"
libraryDependencies ++= Seq(
"com.top10" %% "scala-redis-client" % "1.3.0" withSources()
)
Поскольку нам пришлось объединить некоторые исправленные файлы от Jedis, если вы используете плагин сборки, вам потребуется установить стратегию слияния, которая выбирала бы эти файлы:
mergeStrategy in assembly <<= (mergeStrategy in assembly) { (old) =>
{
case PathList("redis", "clients", xs @ _*) => MergeStrategy.first
case x => old(x)
}
}
Пожалуйста, сообщите нам, если есть лучший способ сделать это.Вы можете создать экземпляр SingleRedis и ShardedRedis с использованием конфигурационных объектов Jedis, но, возможно, вы предпочли бы использовать опциональные аргументы со значениями по умолчанию:
val redis = new SingleRedis("localhost", 6379, Some("password"), timeout, poolSize)
val shards = Seq(Shard("localhost", 6379, Some("password"), timeout),
Shard("localhost", 6380, Some("password"), timeout))
val shardedRedis = new ShardedRedis(shards, poolSize, hashingAlgorithm)
Для полной API рекомендуется ознакомиться с Redis.scala. Если вы заметили какие-либо операции, которые ещё не были отображены из Jedis, просто создайте задачу (лучше всего — запрос на включение). Все довольно прямолинейно, используя Seq и Option там, где это уместно. Однако стоит обратить внимание на пайплайны. Если вы хотите выполнить несколько операций, которые не возвращают никаких результатов, передайте PartialFunction в exec:
redis.exec(pipeline => {
pipeline.set("some", "value")
pipeline.sadd("set", "value")
})
Если вам нужно получить данные, используйте синхронизированную функцию syncAndReturn, которая возвращает кортеж типа TupleN (до 9 элементов) того типа, который вы ожидаете:
val results = redis.syncAndReturn[Option[String], Map[String, Double], Seq[String], Set[String]](pipeline => {
pipeline.get("somekey")
pipeline.zrevrangeWithScores("sortedsetkey", 0, -1)
pipeline.zrevrange("sortedsetkey", 0, -1)
pipeline.smembers("setkey")
})
```К сожалению, это предоставляет только исключения времени выполнения, если вы неправильно указали параметры типа (как количество, так и сами типы). Бьюсь над тем, чтобы решить эту проблему как компиляционную (вклады приветствуются).Аналогичным образом, если вам нужно получить множество результатов одного типа, вы можете использовать syncAndReturnAllAs:
```markdown
val results = redis.syncAndReturnAll[Map[String, Double]](pipeline => {
(0 until 100).foreach(i => pipeline.zrevrangeWithScores("sortedsetkey:" + i, 0, -1))
})
Но если вы заметили какие-либо проблемы или недочеты, пожалуйста, сообщите нам об этом.
Вы можете оставить комментарий после Вход в систему
Неприемлемый контент может быть отображен здесь и не будет показан на странице. Вы можете проверить и изменить его с помощью соответствующей функции редактирования.
Если вы подтверждаете, что содержание не содержит непристойной лексики/перенаправления на рекламу/насилия/вульгарной порнографии/нарушений/пиратства/ложного/незначительного или незаконного контента, связанного с национальными законами и предписаниями, вы можете нажать «Отправить» для подачи апелляции, и мы обработаем ее как можно скорее.
Комментарии ( 0 )