All Downloads are FREE. Search and download functionalities are using the official Maven repository.

com.redis.api.TransactionOperations.scala Maven / Gradle / Ivy

The newest version!
package com.redis
package api

import scala.concurrent.ExecutionContext
import scala.util.{Success, Failure}
import serialization._
import akka.pattern.ask
import akka.util.Timeout
import com.redis.protocol.{TransactionCommands, Discarded}
import ExecutionContext.Implicits.global

trait TransactionOperations { this: RedisOps =>
  import TransactionCommands._

  def multi()(implicit timeout: Timeout) =
    clientRef.ask(Multi).mapTo[Multi.type#Ret]

  def exec()(implicit timeout: Timeout) =
    clientRef.ask(Exec).mapTo[Exec.type#Ret]

  def discard()(implicit timeout: Timeout) =
    clientRef.ask(Discard).mapTo[Discard.type#Ret].map(_ => Discarded)

  def watch(keys: Seq[String])(implicit timeout: Timeout) =
    clientRef.ask(Watch(keys)).mapTo[Watch#Ret]

  def watch(key: String, keys: String*)(implicit timeout: Timeout) =
    clientRef.ask(Watch(key, keys:_*)).mapTo[Watch#Ret]

  def unwatch()(implicit timeout: Timeout) =
    clientRef.ask(Unwatch).mapTo[Unwatch.type#Ret]

  def withTransaction(txn: RedisOps => Unit)(implicit timeout: Timeout) = {
    multi()
    try {
      txn(this)
      exec()
    } catch {
      case th: Throwable => discard()
    }
  }
}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy