library(redux)
library(RedisAPI)
library(RcppRedis)
library(rredis)
library(rbenchmark)

data(trees)
fit <- lm(log(Volume) ~ log(Girth) + log(Height), data=trees)

rawfit <- rawToChar(serialize(fit,NULL,ascii=TRUE))

redis <- new(Redis)
rredis::redisConnect()
reduxConn <- redux::hiredis()

hiredis <- function() redis$set("fits", fit)
rredis <- function() rredis::redisSet("fits2", fit)
reduxs <- function() reduxConn$SET("fits3", object_to_bin(fit))

res <- benchmark(hiredis(), rredis(), reduxs(), replications=1000)[,1:4]
print(res)
##        test replications elapsed relative
## 1 hiredis()         1000   0.093    1.069
## 3  reduxs()         1000   0.087    1.000
## 2  rredis()         1000   0.494    5.678
all.equal(unserialize(charToRaw(redis$exec("GET fits1"))), fit)
## [1] TRUE
all.equal(rredis::redisGet("fits2"), fit)
## [1] TRUE
all.equal(bin_to_object(reduxConn$GET("fits2")), fit)
## [1] TRUE
if (redisExists("abc1")) redisDelete("abc1")
## [1] "1"
## attr(,"redis string value")
## [1] TRUE
if (redisExists("abc2")) redisDelete("abc2")
## [1] "1"
## attr(,"redis string value")
## [1] TRUE
if (redisExists("abc3")) redisDelete("abc3")
## [1] "1"
## attr(,"redis string value")
## [1] TRUE
abc <- paste0(rep(letters,10),collapse="")

hiredisP<- function() redis$rpush("abc1", abc)
rredisP <- function() rredis::redisRPush("abc2", abc)
reduxP <- function() reduxConn$RPUSH("abc3", object_to_bin(abc))

resP <- benchmark(hiredisP(), rredisP(), reduxP(), replications=100)[,1:4]
print(resP)
##         test replications elapsed relative
## 1 hiredisP()          100   0.006     1.50
## 3   reduxP()          100   0.004     1.00
## 2  rredisP()          100   0.043    10.75
hiredisLR <-    function() redis$lrange("abc1",0,-1)
rredisLR  <-  function() redisLRange("abc2",0,-1)
reduxLR <- function() lapply(reduxConn$LRANGE("abc3",0,-1), bin_to_object)

resLR <- benchmark(hiredisLR(), rredisLR(), reduxLR(), replications=100)[,1:4]
print(resLR)
##          test replications elapsed relative
## 1 hiredisLR()          100   0.073    2.607
## 3   reduxLR()          100   0.028    1.000
## 2  rredisLR()          100   0.690   24.643
abc1 <- hiredisLR()
abc2 <- rredisLR()
abc3 <- reduxLR()
abcList <- lapply(1:101,function(x) abc)

all.equal(abc1, abcList)
## [1] TRUE
all.equal(abc1, abc2)
## [1] TRUE
all.equal(abc1, abc3)
## [1] TRUE