This is a plugin for Akka Persistence that uses Redis as backend. It uses rediscala, an asynchronous Redis client written with Akka and Scala. It also depends on play-json for JSON serialization.
Use versions from 0.9.0
resolvers += Resolver.jcenterRepo // Adds Bintray to resolvers for akka-persistence-redis and rediscala libraryDependencies ++= Seq("com.hootsuite" %% "akka-persistence-redis" % "0.9.0")
Use versions from 0.7.0
resolvers += Resolver.jcenterRepo // Adds Bintray to resolvers for akka-persistence-redis and rediscala libraryDependencies ++= Seq("com.hootsuite" %% "akka-persistence-redis" % "0.7.0")
Use 0.6.0
resolvers += Resolver.jcenterRepo // Adds Bintray to resolvers for akka-persistence-redis and rediscala libraryDependencies ++= Seq("com.hootsuite" %% "akka-persistence-redis" % "0.6.0")
Use 0.5.0
resolvers += Resolver.jcenterRepo // Adds Bintray to resolvers for akka-persistence-redis and rediscala libraryDependencies ++= Seq("com.hootsuite" %% "akka-persistence-redis" % "0.3.0")
Use 0.2.2
resolvers += Resolver.jcenterRepo // Adds Bintray to resolvers for akka-persistence-redis and rediscala libraryDependencies ++= Seq("com.hootsuite" %% "akka-persistence-redis" % "0.2.2")
Deprecated methods since Akka 2.3.4 are NOT implemented. As a result, some tests in TCK fail. Rest of methods are tested with the test harness included in this project.
Development snapshots are published on JFrog OSS resolvers += "akka-persistence-redis" at "http://oss.jfrog.org/oss-snapshot-local"
build.sbt
resolvers += Resolver.jcenterRepo // Adds Bintray to resolvers for akka-persistence-redis and rediscala libraryDependencies ++= Seq("com.hootsuite" %% "akka-persistence-redis" % "0.4.0")
akka.persistence.journal.plugin = "akka-persistence-redis.journal" akka.persistence.snapshot-store.plugin = "akka-persistence-redis.snapshot"
From rediscala
redis { host = "localhost" port = 6379 # optional password = "topsecret" db = 1 }
If using sentinel
redis { sentinel = true sentinel-master = "mymaster" //master name sentinels = [{host :"localhost", port: 26379}] // list of sentinel addresses }
Dockerfile is provided to set up Redis server to run tests.
# Build and start Redis docker container docker build -t <your.name>/redis . docker run -d -p 6379:6379 <your.name>/redis # Run tests sbt test # Stop docker container docker stop <container.id>
Journal and snapshot use "journal:" and "snapshot:" as part of keys respectively as it is a good practice to create namespace for keys reference The namespaces can be overriden using the akka-persistence-redis.journal.key-namespace and akka-persistence-redis.snapshot.key-namespace.
In order to enforce ordering, journal entries and snapshots are inserted into Sorted Set and sorted by sequenceNr
By default, global ExecutionContext is used for Redis operation. This blocks calling thread for synchronous Akka Persistence APIs. Override JournalExecutionContext trait to use custom thread pool if blocking in global is undesirable.
trait CustomExecutionContext extends JournalExecutionContext { override implicit val ec: ExecutionContext = ExecutionContext.fromExecutorService(Executors.newSingleThreadExecutor()) }
Contribute by submitting a PR and a bug report in GitHub.