packages feed

hedis 0.6.3 → 0.6.4

raw patch · 4 files changed

+419/−442 lines, 4 files

Files

hedis.cabal view
@@ -1,5 +1,5 @@ name:               hedis-version:            0.6.3+version:            0.6.4 synopsis:     Client library for the Redis datastore: supports full command set,       pipelining.@@ -34,38 +34,6 @@     .     For detailed documentation, see the "Database.Redis" module.     .-    [Changes since version 0.5.1]-    .-    * Changed return type of HDEL from Bool to Integer.-    .-    * Some documentation updates.-    .-    [Changes since version 0.5]-    .-    * New commands: DUMP, RESTORE, BITOP, BITCOUNT.-    .-    * Removed the dependency on stm.-    .-    * Improved performance of Queued in long transactions.-    .-    * Minor documentation updates.-    .-    [Changes since version 0.4.1]-    .-    * Added new Redis 2.6 commands, including Lua scripting support.-    .-    * A transaction context is now created by using the 'multiExec' function.-      The functions 'multi', 'exec' and 'discard' are no longer available-      individually.-    .-    * Inside of a transaction, commands return their results wrapped in a-      composable /future/, called 'Queued'.-    .-    * The 'getType' command (the Redis TYPE command) now has a custom return-      type 'RedisType'.-    .-    * Minor improvements and fixes to the documentation.-    . license:            BSD3 license-file:       LICENSE author:             Falko Peters@@ -83,7 +51,7 @@  library   hs-source-dirs:   src-  ghc-options:      -Wall+  ghc-options:      -Wall -fwarn-tabs   ghc-prof-options: -auto-all   exposed-modules:  Database.Redis   build-depends:    attoparsec >= 0.10,
src/Database/Redis.hs view
@@ -137,7 +137,7 @@     HostName,PortID(..),          -- * Commands-	module Database.Redis.Commands,+    module Database.Redis.Commands,          -- * Transactions     module Database.Redis.Transactions,
src/Database/Redis/Commands.hs view
@@ -201,109 +201,43 @@ import Database.Redis.Types import Database.Redis.Core -flushall+bgrewriteaof     :: (RedisCtx m f)     => m (f Status)-flushall  = sendRequest (["FLUSHALL"] )--time-    :: (RedisCtx m f)-    => m (f (Integer,Integer))-time  = sendRequest (["TIME"] )--hdel-    :: (RedisCtx m f)-    => ByteString -- ^ key-    -> [ByteString] -- ^ field-    -> m (f Integer)-hdel key field = sendRequest (["HDEL"] ++ [encode key] ++ map encode field )--hincrby-    :: (RedisCtx m f)-    => ByteString -- ^ key-    -> ByteString -- ^ field-    -> Integer -- ^ increment-    -> m (f Integer)-hincrby key field increment = sendRequest (["HINCRBY"] ++ [encode key] ++ [encode field] ++ [encode increment] )+bgrewriteaof  = sendRequest (["BGREWRITEAOF"] ) -hincrbyfloat+sinter     :: (RedisCtx m f)-    => ByteString -- ^ key-    -> ByteString -- ^ field-    -> Double -- ^ increment-    -> m (f Double)-hincrbyfloat key field increment = sendRequest (["HINCRBYFLOAT"] ++ [encode key] ++ [encode field] ++ [encode increment] )+    => [ByteString] -- ^ key+    -> m (f [ByteString])+sinter key = sendRequest (["SINTER"] ++ map encode key ) -getset+scriptExists     :: (RedisCtx m f)-    => ByteString -- ^ key-    -> ByteString -- ^ value-    -> m (f (Maybe ByteString))-getset key value = sendRequest (["GETSET"] ++ [encode key] ++ [encode value] )+    => [ByteString] -- ^ script+    -> m (f [Bool])+scriptExists script = sendRequest (["SCRIPT","EXISTS"] ++ map encode script ) -rpushx+sunionstore     :: (RedisCtx m f)-    => ByteString -- ^ key-    -> ByteString -- ^ value+    => ByteString -- ^ destination+    -> [ByteString] -- ^ key     -> m (f Integer)-rpushx key value = sendRequest (["RPUSHX"] ++ [encode key] ++ [encode value] )+sunionstore destination key = sendRequest (["SUNIONSTORE"] ++ [encode destination] ++ map encode key ) -setnx+setex     :: (RedisCtx m f)     => ByteString -- ^ key+    -> Integer -- ^ seconds     -> ByteString -- ^ value-    -> m (f Bool)-setnx key value = sendRequest (["SETNX"] ++ [encode key] ++ [encode value] )--keys-    :: (RedisCtx m f)-    => ByteString -- ^ pattern-    -> m (f [ByteString])-keys pattern = sendRequest (["KEYS"] ++ [encode pattern] )--bgsave-    :: (RedisCtx m f)-    => m (f Status)-bgsave  = sendRequest (["BGSAVE"] )--slaveof-    :: (RedisCtx m f)-    => ByteString -- ^ host-    -> ByteString -- ^ port     -> m (f Status)-slaveof host port = sendRequest (["SLAVEOF"] ++ [encode host] ++ [encode port] )--debugObject-    :: (RedisCtx m f)-    => ByteString -- ^ key-    -> m (f ByteString)-debugObject key = sendRequest (["DEBUG","OBJECT"] ++ [encode key] )--bgrewriteaof-    :: (RedisCtx m f)-    => m (f Status)-bgrewriteaof  = sendRequest (["BGREWRITEAOF"] )--zincrby-    :: (RedisCtx m f)-    => ByteString -- ^ key-    -> Integer -- ^ increment-    -> ByteString -- ^ member-    -> m (f Double)-zincrby key increment member = sendRequest (["ZINCRBY"] ++ [encode key] ++ [encode increment] ++ [encode member] )--sinter-    :: (RedisCtx m f)-    => [ByteString] -- ^ key-    -> m (f [ByteString])-sinter key = sendRequest (["SINTER"] ++ map encode key )+setex key seconds value = sendRequest (["SETEX"] ++ [encode key] ++ [encode seconds] ++ [encode value] ) -hmset+hlen     :: (RedisCtx m f)     => ByteString -- ^ key-    -> [(ByteString,ByteString)] -- ^ fieldValue-    -> m (f Status)-hmset key fieldValue = sendRequest (["HMSET"] ++ [encode key] ++ concatMap (\(x,y) -> [encode x,encode y])fieldValue )+    -> m (f Integer)+hlen key = sendRequest (["HLEN"] ++ [encode key] )  scard     :: (RedisCtx m f)@@ -311,64 +245,71 @@     -> m (f Integer) scard key = sendRequest (["SCARD"] ++ [encode key] ) -get+zremrangebyscore     :: (RedisCtx m f)     => ByteString -- ^ key-    -> m (f (Maybe ByteString))-get key = sendRequest (["GET"] ++ [encode key] )+    -> Double -- ^ min+    -> Double -- ^ max+    -> m (f Integer)+zremrangebyscore key min max = sendRequest (["ZREMRANGEBYSCORE"] ++ [encode key] ++ [encode min] ++ [encode max] ) -lrem+rpushx     :: (RedisCtx m f)     => ByteString -- ^ key-    -> Integer -- ^ count     -> ByteString -- ^ value     -> m (f Integer)-lrem key count value = sendRequest (["LREM"] ++ [encode key] ++ [encode count] ++ [encode value] )+rpushx key value = sendRequest (["RPUSHX"] ++ [encode key] ++ [encode value] ) -expireat+spop     :: (RedisCtx m f)     => ByteString -- ^ key-    -> Integer -- ^ timestamp-    -> m (f Bool)-expireat key timestamp = sendRequest (["EXPIREAT"] ++ [encode key] ++ [encode timestamp] )+    -> m (f (Maybe ByteString))+spop key = sendRequest (["SPOP"] ++ [encode key] ) -incr+pttl     :: (RedisCtx m f)     => ByteString -- ^ key     -> m (f Integer)-incr key = sendRequest (["INCR"] ++ [encode key] )+pttl key = sendRequest (["PTTL"] ++ [encode key] ) -renamenx+rpush     :: (RedisCtx m f)     => ByteString -- ^ key-    -> ByteString -- ^ newkey-    -> m (f Bool)-renamenx key newkey = sendRequest (["RENAMENX"] ++ [encode key] ++ [encode newkey] )+    -> [ByteString] -- ^ value+    -> m (f Integer)+rpush key value = sendRequest (["RPUSH"] ++ [encode key] ++ map encode value ) -pexpireat+debugObject     :: (RedisCtx m f)     => ByteString -- ^ key-    -> Integer -- ^ millisecondsTimestamp-    -> m (f Bool)-pexpireat key millisecondsTimestamp = sendRequest (["PEXPIREAT"] ++ [encode key] ++ [encode millisecondsTimestamp] )+    -> m (f ByteString)+debugObject key = sendRequest (["DEBUG","OBJECT"] ++ [encode key] ) -save+randomkey     :: (RedisCtx m f)+    => m (f (Maybe ByteString))+randomkey  = sendRequest (["RANDOMKEY"] )++bgsave+    :: (RedisCtx m f)     => m (f Status)-save  = sendRequest (["SAVE"] )+bgsave  = sendRequest (["BGSAVE"] ) -echo+getrange     :: (RedisCtx m f)-    => ByteString -- ^ message+    => ByteString -- ^ key+    -> Integer -- ^ start+    -> Integer -- ^ end     -> m (f ByteString)-echo message = sendRequest (["ECHO"] ++ [encode message] )+getrange key start end = sendRequest (["GETRANGE"] ++ [encode key] ++ [encode start] ++ [encode end] ) -blpop+zcount     :: (RedisCtx m f)-    => [ByteString] -- ^ key-    -> Integer -- ^ timeout-    -> m (f (Maybe (ByteString,ByteString)))-blpop key timeout = sendRequest (["BLPOP"] ++ map encode key ++ [encode timeout] )+    => ByteString -- ^ key+    -> Double -- ^ min+    -> Double -- ^ max+    -> m (f Integer)+zcount key min max = sendRequest (["ZCOUNT"] ++ [encode key] ++ [encode min] ++ [encode max] )  sdiffstore     :: (RedisCtx m f)@@ -377,6 +318,13 @@     -> m (f Integer) sdiffstore destination key = sendRequest (["SDIFFSTORE"] ++ [encode destination] ++ map encode key ) +blpop+    :: (RedisCtx m f)+    => [ByteString] -- ^ key+    -> Integer -- ^ timeout+    -> m (f (Maybe (ByteString,ByteString)))+blpop key timeout = sendRequest (["BLPOP"] ++ map encode key ++ [encode timeout] )+ migrate     :: (RedisCtx m f)     => ByteString -- ^ host@@ -387,94 +335,99 @@     -> m (f Status) migrate host port key destinationDb timeout = sendRequest (["MIGRATE"] ++ [encode host] ++ [encode port] ++ [encode key] ++ [encode destinationDb] ++ [encode timeout] ) -move+sismember     :: (RedisCtx m f)     => ByteString -- ^ key-    -> Integer -- ^ db+    -> ByteString -- ^ member     -> m (f Bool)-move key db = sendRequest (["MOVE"] ++ [encode key] ++ [encode db] )+sismember key member = sendRequest (["SISMEMBER"] ++ [encode key] ++ [encode member] ) -hvals+incr     :: (RedisCtx m f)     => ByteString -- ^ key-    -> m (f [ByteString])-hvals key = sendRequest (["HVALS"] ++ [encode key] )+    -> m (f Integer)+incr key = sendRequest (["INCR"] ++ [encode key] ) -exists+hget     :: (RedisCtx m f)     => ByteString -- ^ key-    -> m (f Bool)-exists key = sendRequest (["EXISTS"] ++ [encode key] )+    -> ByteString -- ^ field+    -> m (f (Maybe ByteString))+hget key field = sendRequest (["HGET"] ++ [encode key] ++ [encode field] ) -smembers+expireat     :: (RedisCtx m f)     => ByteString -- ^ key+    -> Integer -- ^ timestamp+    -> m (f Bool)+expireat key timestamp = sendRequest (["EXPIREAT"] ++ [encode key] ++ [encode timestamp] )++info+    :: (RedisCtx m f)+    => m (f ByteString)+info  = sendRequest (["INFO"] )++sdiff+    :: (RedisCtx m f)+    => [ByteString] -- ^ key     -> m (f [ByteString])-smembers key = sendRequest (["SMEMBERS"] ++ [encode key] )+sdiff key = sendRequest (["SDIFF"] ++ map encode key ) -decr+append     :: (RedisCtx m f)     => ByteString -- ^ key+    -> ByteString -- ^ value     -> m (f Integer)-decr key = sendRequest (["DECR"] ++ [encode key] )+append key value = sendRequest (["APPEND"] ++ [encode key] ++ [encode value] ) -rename+lset     :: (RedisCtx m f)     => ByteString -- ^ key-    -> ByteString -- ^ newkey+    -> Integer -- ^ index+    -> ByteString -- ^ value     -> m (f Status)-rename key newkey = sendRequest (["RENAME"] ++ [encode key] ++ [encode newkey] )+lset key index value = sendRequest (["LSET"] ++ [encode key] ++ [encode index] ++ [encode value] ) -sunion+get     :: (RedisCtx m f)-    => [ByteString] -- ^ key-    -> m (f [ByteString])-sunion key = sendRequest (["SUNION"] ++ map encode key )+    => ByteString -- ^ key+    -> m (f (Maybe ByteString))+get key = sendRequest (["GET"] ++ [encode key] ) -ping+scriptFlush     :: (RedisCtx m f)     => m (f Status)-ping  = sendRequest (["PING"] )--zrem-    :: (RedisCtx m f)-    => ByteString -- ^ key-    -> [ByteString] -- ^ member-    -> m (f Integer)-zrem key member = sendRequest (["ZREM"] ++ [encode key] ++ map encode member )+scriptFlush  = sendRequest (["SCRIPT","FLUSH"] ) -hmget+lpop     :: (RedisCtx m f)     => ByteString -- ^ key-    -> [ByteString] -- ^ field-    -> m (f [Maybe ByteString])-hmget key field = sendRequest (["HMGET"] ++ [encode key] ++ map encode field )+    -> m (f (Maybe ByteString))+lpop key = sendRequest (["LPOP"] ++ [encode key] ) -pexpire+lastsave     :: (RedisCtx m f)-    => ByteString -- ^ key-    -> Integer -- ^ milliseconds-    -> m (f Bool)-pexpire key milliseconds = sendRequest (["PEXPIRE"] ++ [encode key] ++ [encode milliseconds] )+    => m (f Integer)+lastsave  = sendRequest (["LASTSAVE"] )  dbsize     :: (RedisCtx m f)     => m (f Integer) dbsize  = sendRequest (["DBSIZE"] ) -lrange+zadd     :: (RedisCtx m f)     => ByteString -- ^ key-    -> Integer -- ^ start-    -> Integer -- ^ stop-    -> m (f [ByteString])-lrange key start stop = sendRequest (["LRANGE"] ++ [encode key] ++ [encode start] ++ [encode stop] )+    -> [(Double,ByteString)] -- ^ scoreMember+    -> m (f Integer)+zadd key scoreMember = sendRequest (["ZADD"] ++ [encode key] ++ concatMap (\(x,y) -> [encode x,encode y])scoreMember ) -lpop+hmget     :: (RedisCtx m f)     => ByteString -- ^ key-    -> m (f (Maybe ByteString))-lpop key = sendRequest (["LPOP"] ++ [encode key] )+    -> [ByteString] -- ^ field+    -> m (f [Maybe ByteString])+hmget key field = sendRequest (["HMGET"] ++ [encode key] ++ map encode field )  expire     :: (RedisCtx m f)@@ -483,112 +436,48 @@     -> m (f Bool) expire key seconds = sendRequest (["EXPIRE"] ++ [encode key] ++ [encode seconds] ) -flushdb-    :: (RedisCtx m f)-    => m (f Status)-flushdb  = sendRequest (["FLUSHDB"] )--smove-    :: (RedisCtx m f)-    => ByteString -- ^ source-    -> ByteString -- ^ destination-    -> ByteString -- ^ member-    -> m (f Bool)-smove source destination member = sendRequest (["SMOVE"] ++ [encode source] ++ [encode destination] ++ [encode member] )--zremrangebyrank+mget     :: (RedisCtx m f)-    => ByteString -- ^ key-    -> Integer -- ^ start-    -> Integer -- ^ stop-    -> m (f Integer)-zremrangebyrank key start stop = sendRequest (["ZREMRANGEBYRANK"] ++ [encode key] ++ [encode start] ++ [encode stop] )+    => [ByteString] -- ^ key+    -> m (f [Maybe ByteString])+mget key = sendRequest (["MGET"] ++ map encode key ) -sadd+hexists     :: (RedisCtx m f)     => ByteString -- ^ key-    -> [ByteString] -- ^ member-    -> m (f Integer)-sadd key member = sendRequest (["SADD"] ++ [encode key] ++ map encode member )+    -> ByteString -- ^ field+    -> m (f Bool)+hexists key field = sendRequest (["HEXISTS"] ++ [encode key] ++ [encode field] ) -lpush+exists     :: (RedisCtx m f)     => ByteString -- ^ key-    -> [ByteString] -- ^ value-    -> m (f Integer)-lpush key value = sendRequest (["LPUSH"] ++ [encode key] ++ map encode value )+    -> m (f Bool)+exists key = sendRequest (["EXISTS"] ++ [encode key] ) -strlen+sunion     :: (RedisCtx m f)-    => ByteString -- ^ key-    -> m (f Integer)-strlen key = sendRequest (["STRLEN"] ++ [encode key] )+    => [ByteString] -- ^ key+    -> m (f [ByteString])+sunion key = sendRequest (["SUNION"] ++ map encode key ) -set+configSet     :: (RedisCtx m f)-    => ByteString -- ^ key+    => ByteString -- ^ parameter     -> ByteString -- ^ value     -> m (f Status)-set key value = sendRequest (["SET"] ++ [encode key] ++ [encode value] )--lindex-    :: (RedisCtx m f)-    => ByteString -- ^ key-    -> Integer -- ^ index-    -> m (f (Maybe ByteString))-lindex key index = sendRequest (["LINDEX"] ++ [encode key] ++ [encode index] )--zscore-    :: (RedisCtx m f)-    => ByteString -- ^ key-    -> ByteString -- ^ member-    -> m (f (Maybe Double))-zscore key member = sendRequest (["ZSCORE"] ++ [encode key] ++ [encode member] )--configResetstat-    :: (RedisCtx m f)-    => m (f Status)-configResetstat  = sendRequest (["CONFIG","RESETSTAT"] )--del-    :: (RedisCtx m f)-    => [ByteString] -- ^ key-    -> m (f Integer)-del key = sendRequest (["DEL"] ++ map encode key )+configSet parameter value = sendRequest (["CONFIG","SET"] ++ [encode parameter] ++ [encode value] ) -zrevrank+smembers     :: (RedisCtx m f)     => ByteString -- ^ key-    -> ByteString -- ^ member-    -> m (f (Maybe Integer))-zrevrank key member = sendRequest (["ZREVRANK"] ++ [encode key] ++ [encode member] )+    -> m (f [ByteString])+smembers key = sendRequest (["SMEMBERS"] ++ [encode key] ) -scriptKill+ping     :: (RedisCtx m f)     => m (f Status)-scriptKill  = sendRequest (["SCRIPT","KILL"] )--incrby-    :: (RedisCtx m f)-    => ByteString -- ^ key-    -> Integer -- ^ increment-    -> m (f Integer)-incrby key increment = sendRequest (["INCRBY"] ++ [encode key] ++ [encode increment] )--setbit-    :: (RedisCtx m f)-    => ByteString -- ^ key-    -> Integer -- ^ offset-    -> ByteString -- ^ value-    -> m (f Integer)-setbit key offset value = sendRequest (["SETBIT"] ++ [encode key] ++ [encode offset] ++ [encode value] )--incrbyfloat-    :: (RedisCtx m f)-    => ByteString -- ^ key-    -> Double -- ^ increment-    -> m (f Double)-incrbyfloat key increment = sendRequest (["INCRBYFLOAT"] ++ [encode key] ++ [encode increment] )+ping  = sendRequest (["PING"] )  brpoplpush     :: (RedisCtx m f)@@ -604,6 +493,13 @@     -> m (f (Maybe ByteString)) rpop key = sendRequest (["RPOP"] ++ [encode key] ) +incrbyfloat+    :: (RedisCtx m f)+    => ByteString -- ^ key+    -> Double -- ^ increment+    -> m (f Double)+incrbyfloat key increment = sendRequest (["INCRBYFLOAT"] ++ [encode key] ++ [encode increment] )+ setrange     :: (RedisCtx m f)     => ByteString -- ^ key@@ -612,76 +508,74 @@     -> m (f Integer) setrange key offset value = sendRequest (["SETRANGE"] ++ [encode key] ++ [encode offset] ++ [encode value] ) -ttl-    :: (RedisCtx m f)-    => ByteString -- ^ key-    -> m (f Integer)-ttl key = sendRequest (["TTL"] ++ [encode key] )--zremrangebyscore+hincrbyfloat     :: (RedisCtx m f)     => ByteString -- ^ key-    -> Double -- ^ min-    -> Double -- ^ max-    -> m (f Integer)-zremrangebyscore key min max = sendRequest (["ZREMRANGEBYSCORE"] ++ [encode key] ++ [encode min] ++ [encode max] )+    -> ByteString -- ^ field+    -> Double -- ^ increment+    -> m (f Double)+hincrbyfloat key field increment = sendRequest (["HINCRBYFLOAT"] ++ [encode key] ++ [encode field] ++ [encode increment] ) -zrank+zrevrank     :: (RedisCtx m f)     => ByteString -- ^ key     -> ByteString -- ^ member     -> m (f (Maybe Integer))-zrank key member = sendRequest (["ZRANK"] ++ [encode key] ++ [encode member] )+zrevrank key member = sendRequest (["ZREVRANK"] ++ [encode key] ++ [encode member] ) -hkeys+lindex     :: (RedisCtx m f)     => ByteString -- ^ key-    -> m (f [ByteString])-hkeys key = sendRequest (["HKEYS"] ++ [encode key] )+    -> Integer -- ^ index+    -> m (f (Maybe ByteString))+lindex key index = sendRequest (["LINDEX"] ++ [encode key] ++ [encode index] ) -dump+sadd     :: (RedisCtx m f)     => ByteString -- ^ key-    -> m (f ByteString)-dump key = sendRequest (["DUMP"] ++ [encode key] )+    -> [ByteString] -- ^ member+    -> m (f Integer)+sadd key member = sendRequest (["SADD"] ++ [encode key] ++ map encode member ) -rpush+srandmember     :: (RedisCtx m f)     => ByteString -- ^ key-    -> [ByteString] -- ^ value-    -> m (f Integer)-rpush key value = sendRequest (["RPUSH"] ++ [encode key] ++ map encode value )+    -> m (f (Maybe ByteString))+srandmember key = sendRequest (["SRANDMEMBER"] ++ [encode key] ) -pttl+zscore     :: (RedisCtx m f)     => ByteString -- ^ key-    -> m (f Integer)-pttl key = sendRequest (["PTTL"] ++ [encode key] )+    -> ByteString -- ^ member+    -> m (f (Maybe Double))+zscore key member = sendRequest (["ZSCORE"] ++ [encode key] ++ [encode member] ) -spop+persist     :: (RedisCtx m f)     => ByteString -- ^ key-    -> m (f (Maybe ByteString))-spop key = sendRequest (["SPOP"] ++ [encode key] )+    -> m (f Bool)+persist key = sendRequest (["PERSIST"] ++ [encode key] ) -randomkey+zincrby     :: (RedisCtx m f)-    => m (f (Maybe ByteString))-randomkey  = sendRequest (["RANDOMKEY"] )+    => ByteString -- ^ key+    -> Integer -- ^ increment+    -> ByteString -- ^ member+    -> m (f Double)+zincrby key increment member = sendRequest (["ZINCRBY"] ++ [encode key] ++ [encode increment] ++ [encode member] ) -hsetnx+rpoplpush     :: (RedisCtx m f)-    => ByteString -- ^ key-    -> ByteString -- ^ field-    -> ByteString -- ^ value-    -> m (f Bool)-hsetnx key field value = sendRequest (["HSETNX"] ++ [encode key] ++ [encode field] ++ [encode value] )+    => ByteString -- ^ source+    -> ByteString -- ^ destination+    -> m (f (Maybe ByteString))+rpoplpush source destination = sendRequest (["RPOPLPUSH"] ++ [encode source] ++ [encode destination] ) -configGet+hgetall     :: (RedisCtx m f)-    => ByteString -- ^ parameter+    => ByteString -- ^ key     -> m (f [(ByteString,ByteString)])-configGet parameter = sendRequest (["CONFIG","GET"] ++ [encode parameter] )+hgetall key = sendRequest (["HGETALL"] ++ [encode key] )  mset     :: (RedisCtx m f)@@ -689,26 +583,20 @@     -> m (f Status) mset keyValue = sendRequest (["MSET"] ++ concatMap (\(x,y) -> [encode x,encode y])keyValue ) -setex+hmset     :: (RedisCtx m f)     => ByteString -- ^ key-    -> Integer -- ^ seconds-    -> ByteString -- ^ value+    -> [(ByteString,ByteString)] -- ^ fieldValue     -> m (f Status)-setex key seconds value = sendRequest (["SETEX"] ++ [encode key] ++ [encode seconds] ++ [encode value] )--sunionstore-    :: (RedisCtx m f)-    => ByteString -- ^ destination-    -> [ByteString] -- ^ key-    -> m (f Integer)-sunionstore destination key = sendRequest (["SUNIONSTORE"] ++ [encode destination] ++ map encode key )+hmset key fieldValue = sendRequest (["HMSET"] ++ [encode key] ++ concatMap (\(x,y) -> [encode x,encode y])fieldValue ) -scriptExists+psetex     :: (RedisCtx m f)-    => [ByteString] -- ^ script-    -> m (f [Bool])-scriptExists script = sendRequest (["SCRIPT","EXISTS"] ++ map encode script )+    => ByteString -- ^ key+    -> Integer -- ^ milliseconds+    -> ByteString -- ^ value+    -> m (f Status)+psetex key milliseconds value = sendRequest (["PSETEX"] ++ [encode key] ++ [encode milliseconds] ++ [encode value] )  brpop     :: (RedisCtx m f)@@ -717,96 +605,90 @@     -> m (f (Maybe (ByteString,ByteString))) brpop key timeout = sendRequest (["BRPOP"] ++ map encode key ++ [encode timeout] ) -psetex+hsetnx     :: (RedisCtx m f)     => ByteString -- ^ key-    -> Integer -- ^ milliseconds+    -> ByteString -- ^ field     -> ByteString -- ^ value-    -> m (f Status)-psetex key milliseconds value = sendRequest (["PSETEX"] ++ [encode key] ++ [encode milliseconds] ++ [encode value] )+    -> m (f Bool)+hsetnx key field value = sendRequest (["HSETNX"] ++ [encode key] ++ [encode field] ++ [encode value] ) -rpoplpush+configGet     :: (RedisCtx m f)-    => ByteString -- ^ source-    -> ByteString -- ^ destination-    -> m (f (Maybe ByteString))-rpoplpush source destination = sendRequest (["RPOPLPUSH"] ++ [encode source] ++ [encode destination] )+    => ByteString -- ^ parameter+    -> m (f [(ByteString,ByteString)])+configGet parameter = sendRequest (["CONFIG","GET"] ++ [encode parameter] ) -hlen+zrank     :: (RedisCtx m f)     => ByteString -- ^ key-    -> m (f Integer)-hlen key = sendRequest (["HLEN"] ++ [encode key] )+    -> ByteString -- ^ member+    -> m (f (Maybe Integer))+zrank key member = sendRequest (["ZRANK"] ++ [encode key] ++ [encode member] ) -hgetall+hkeys     :: (RedisCtx m f)     => ByteString -- ^ key-    -> m (f [(ByteString,ByteString)])-hgetall key = sendRequest (["HGETALL"] ++ [encode key] )+    -> m (f [ByteString])+hkeys key = sendRequest (["HKEYS"] ++ [encode key] ) -zcard+ttl     :: (RedisCtx m f)     => ByteString -- ^ key     -> m (f Integer)-zcard key = sendRequest (["ZCARD"] ++ [encode key] )+ttl key = sendRequest (["TTL"] ++ [encode key] ) -ltrim+getset     :: (RedisCtx m f)     => ByteString -- ^ key-    -> Integer -- ^ start-    -> Integer -- ^ stop-    -> m (f Status)-ltrim key start stop = sendRequest (["LTRIM"] ++ [encode key] ++ [encode start] ++ [encode stop] )+    -> ByteString -- ^ value+    -> m (f (Maybe ByteString))+getset key value = sendRequest (["GETSET"] ++ [encode key] ++ [encode value] ) -lset+slaveof     :: (RedisCtx m f)-    => ByteString -- ^ key-    -> Integer -- ^ index-    -> ByteString -- ^ value+    => ByteString -- ^ host+    -> ByteString -- ^ port     -> m (f Status)-lset key index value = sendRequest (["LSET"] ++ [encode key] ++ [encode index] ++ [encode value] )+slaveof host port = sendRequest (["SLAVEOF"] ++ [encode host] ++ [encode port] ) -append+setnx     :: (RedisCtx m f)     => ByteString -- ^ key     -> ByteString -- ^ value-    -> m (f Integer)-append key value = sendRequest (["APPEND"] ++ [encode key] ++ [encode value] )--info-    :: (RedisCtx m f)-    => m (f ByteString)-info  = sendRequest (["INFO"] )+    -> m (f Bool)+setnx key value = sendRequest (["SETNX"] ++ [encode key] ++ [encode value] ) -hget+dump     :: (RedisCtx m f)     => ByteString -- ^ key-    -> ByteString -- ^ field-    -> m (f (Maybe ByteString))-hget key field = sendRequest (["HGET"] ++ [encode key] ++ [encode field] )+    -> m (f ByteString)+dump key = sendRequest (["DUMP"] ++ [encode key] ) -sdiff+keys     :: (RedisCtx m f)-    => [ByteString] -- ^ key+    => ByteString -- ^ pattern     -> m (f [ByteString])-sdiff key = sendRequest (["SDIFF"] ++ map encode key )+keys pattern = sendRequest (["KEYS"] ++ [encode pattern] ) -getrange+echo     :: (RedisCtx m f)-    => ByteString -- ^ key-    -> Integer -- ^ start-    -> Integer -- ^ end+    => ByteString -- ^ message     -> m (f ByteString)-getrange key start end = sendRequest (["GETRANGE"] ++ [encode key] ++ [encode start] ++ [encode end] )+echo message = sendRequest (["ECHO"] ++ [encode message] ) -zcount+getbit     :: (RedisCtx m f)     => ByteString -- ^ key-    -> Double -- ^ min-    -> Double -- ^ max+    -> Integer -- ^ offset     -> m (f Integer)-zcount key min max = sendRequest (["ZCOUNT"] ++ [encode key] ++ [encode min] ++ [encode max] )+getbit key offset = sendRequest (["GETBIT"] ++ [encode key] ++ [encode offset] ) +quit+    :: (RedisCtx m f)+    => m (f Status)+quit  = sendRequest (["QUIT"] )+ srem     :: (RedisCtx m f)     => ByteString -- ^ key@@ -814,10 +696,12 @@     -> m (f Integer) srem key member = sendRequest (["SREM"] ++ [encode key] ++ map encode member ) -quit+move     :: (RedisCtx m f)-    => m (f Status)-quit  = sendRequest (["QUIT"] )+    => ByteString -- ^ key+    -> Integer -- ^ db+    -> m (f Bool)+move key db = sendRequest (["MOVE"] ++ [encode key] ++ [encode db] )  scriptLoad     :: (RedisCtx m f)@@ -825,32 +709,81 @@     -> m (f ByteString) scriptLoad script = sendRequest (["SCRIPT","LOAD"] ++ [encode script] ) -getbit+msetnx     :: (RedisCtx m f)+    => [(ByteString,ByteString)] -- ^ keyValue+    -> m (f Bool)+msetnx keyValue = sendRequest (["MSETNX"] ++ concatMap (\(x,y) -> [encode x,encode y])keyValue )++save+    :: (RedisCtx m f)+    => m (f Status)+save  = sendRequest (["SAVE"] )++ltrim+    :: (RedisCtx m f)     => ByteString -- ^ key-    -> Integer -- ^ offset+    -> Integer -- ^ start+    -> Integer -- ^ stop+    -> m (f Status)+ltrim key start stop = sendRequest (["LTRIM"] ++ [encode key] ++ [encode start] ++ [encode stop] )++lrem+    :: (RedisCtx m f)+    => ByteString -- ^ key+    -> Integer -- ^ count+    -> ByteString -- ^ value     -> m (f Integer)-getbit key offset = sendRequest (["GETBIT"] ++ [encode key] ++ [encode offset] )+lrem key count value = sendRequest (["LREM"] ++ [encode key] ++ [encode count] ++ [encode value] ) -msetnx+pexpireat     :: (RedisCtx m f)-    => [(ByteString,ByteString)] -- ^ keyValue+    => ByteString -- ^ key+    -> Integer -- ^ millisecondsTimestamp     -> m (f Bool)-msetnx keyValue = sendRequest (["MSETNX"] ++ concatMap (\(x,y) -> [encode x,encode y])keyValue )+pexpireat key millisecondsTimestamp = sendRequest (["PEXPIREAT"] ++ [encode key] ++ [encode millisecondsTimestamp] ) -sismember+zcard     :: (RedisCtx m f)     => ByteString -- ^ key-    -> ByteString -- ^ member+    -> m (f Integer)+zcard key = sendRequest (["ZCARD"] ++ [encode key] )++renamenx+    :: (RedisCtx m f)+    => ByteString -- ^ key+    -> ByteString -- ^ newkey     -> m (f Bool)-sismember key member = sendRequest (["SISMEMBER"] ++ [encode key] ++ [encode member] )+renamenx key newkey = sendRequest (["RENAMENX"] ++ [encode key] ++ [encode newkey] ) -select+llen     :: (RedisCtx m f)-    => Integer -- ^ index-    -> m (f Status)-select index = sendRequest (["SELECT"] ++ [encode index] )+    => ByteString -- ^ key+    -> m (f Integer)+llen key = sendRequest (["LLEN"] ++ [encode key] ) +pexpire+    :: (RedisCtx m f)+    => ByteString -- ^ key+    -> Integer -- ^ milliseconds+    -> m (f Bool)+pexpire key milliseconds = sendRequest (["PEXPIRE"] ++ [encode key] ++ [encode milliseconds] )++decrby+    :: (RedisCtx m f)+    => ByteString -- ^ key+    -> Integer -- ^ decrement+    -> m (f Integer)+decrby key decrement = sendRequest (["DECRBY"] ++ [encode key] ++ [encode decrement] )++lrange+    :: (RedisCtx m f)+    => ByteString -- ^ key+    -> Integer -- ^ start+    -> Integer -- ^ stop+    -> m (f [ByteString])+lrange key start stop = sendRequest (["LRANGE"] ++ [encode key] ++ [encode start] ++ [encode stop] )+ sinterstore     :: (RedisCtx m f)     => ByteString -- ^ destination@@ -858,6 +791,13 @@     -> m (f Integer) sinterstore destination key = sendRequest (["SINTERSTORE"] ++ [encode destination] ++ map encode key ) +rename+    :: (RedisCtx m f)+    => ByteString -- ^ key+    -> ByteString -- ^ newkey+    -> m (f Status)+rename key newkey = sendRequest (["RENAME"] ++ [encode key] ++ [encode newkey] )+ restore     :: (RedisCtx m f)     => ByteString -- ^ key@@ -866,56 +806,81 @@     -> m (f Status) restore key timeToLive serializedValue = sendRequest (["RESTORE"] ++ [encode key] ++ [encode timeToLive] ++ [encode serializedValue] ) -configSet+hvals     :: (RedisCtx m f)-    => ByteString -- ^ parameter-    -> ByteString -- ^ value-    -> m (f Status)-configSet parameter value = sendRequest (["CONFIG","SET"] ++ [encode parameter] ++ [encode value] )+    => ByteString -- ^ key+    -> m (f [ByteString])+hvals key = sendRequest (["HVALS"] ++ [encode key] ) -hexists+zrem     :: (RedisCtx m f)     => ByteString -- ^ key-    -> ByteString -- ^ field-    -> m (f Bool)-hexists key field = sendRequest (["HEXISTS"] ++ [encode key] ++ [encode field] )+    -> [ByteString] -- ^ member+    -> m (f Integer)+zrem key member = sendRequest (["ZREM"] ++ [encode key] ++ map encode member ) -scriptFlush+decr     :: (RedisCtx m f)+    => ByteString -- ^ key+    -> m (f Integer)+decr key = sendRequest (["DECR"] ++ [encode key] )++configResetstat+    :: (RedisCtx m f)     => m (f Status)-scriptFlush  = sendRequest (["SCRIPT","FLUSH"] )+configResetstat  = sendRequest (["CONFIG","RESETSTAT"] ) -llen+flushall     :: (RedisCtx m f)+    => m (f Status)+flushall  = sendRequest (["FLUSHALL"] )++hdel+    :: (RedisCtx m f)     => ByteString -- ^ key+    -> [ByteString] -- ^ field     -> m (f Integer)-llen key = sendRequest (["LLEN"] ++ [encode key] )+hdel key field = sendRequest (["HDEL"] ++ [encode key] ++ map encode field ) -lastsave+setbit     :: (RedisCtx m f)-    => m (f Integer)-lastsave  = sendRequest (["LASTSAVE"] )+    => ByteString -- ^ key+    -> Integer -- ^ offset+    -> ByteString -- ^ value+    -> m (f Integer)+setbit key offset value = sendRequest (["SETBIT"] ++ [encode key] ++ [encode offset] ++ [encode value] ) -mget+del     :: (RedisCtx m f)     => [ByteString] -- ^ key-    -> m (f [Maybe ByteString])-mget key = sendRequest (["MGET"] ++ map encode key )+    -> m (f Integer)+del key = sendRequest (["DEL"] ++ map encode key ) -zadd+scriptKill     :: (RedisCtx m f)+    => m (f Status)+scriptKill  = sendRequest (["SCRIPT","KILL"] )++incrby+    :: (RedisCtx m f)     => ByteString -- ^ key-    -> [(Double,ByteString)] -- ^ scoreMember+    -> Integer -- ^ increment     -> m (f Integer)-zadd key scoreMember = sendRequest (["ZADD"] ++ [encode key] ++ concatMap (\(x,y) -> [encode x,encode y])scoreMember )+incrby key increment = sendRequest (["INCRBY"] ++ [encode key] ++ [encode increment] ) -decrby+hincrby     :: (RedisCtx m f)     => ByteString -- ^ key-    -> Integer -- ^ decrement+    -> ByteString -- ^ field+    -> Integer -- ^ increment     -> m (f Integer)-decrby key decrement = sendRequest (["DECRBY"] ++ [encode key] ++ [encode decrement] )+hincrby key field increment = sendRequest (["HINCRBY"] ++ [encode key] ++ [encode field] ++ [encode increment] ) +time+    :: (RedisCtx m f)+    => m (f (Integer,Integer))+time  = sendRequest (["TIME"] )+ hset     :: (RedisCtx m f)     => ByteString -- ^ key@@ -924,12 +889,17 @@     -> m (f Bool) hset key field value = sendRequest (["HSET"] ++ [encode key] ++ [encode field] ++ [encode value] ) -srandmember+strlen     :: (RedisCtx m f)     => ByteString -- ^ key-    -> m (f (Maybe ByteString))-srandmember key = sendRequest (["SRANDMEMBER"] ++ [encode key] )+    -> m (f Integer)+strlen key = sendRequest (["STRLEN"] ++ [encode key] ) +flushdb+    :: (RedisCtx m f)+    => m (f Status)+flushdb  = sendRequest (["FLUSHDB"] )+ lpushx     :: (RedisCtx m f)     => ByteString -- ^ key@@ -937,11 +907,35 @@     -> m (f Integer) lpushx key value = sendRequest (["LPUSHX"] ++ [encode key] ++ [encode value] ) -persist+smove     :: (RedisCtx m f)-    => ByteString -- ^ key+    => ByteString -- ^ source+    -> ByteString -- ^ destination+    -> ByteString -- ^ member     -> m (f Bool)-persist key = sendRequest (["PERSIST"] ++ [encode key] )+smove source destination member = sendRequest (["SMOVE"] ++ [encode source] ++ [encode destination] ++ [encode member] )++zremrangebyrank+    :: (RedisCtx m f)+    => ByteString -- ^ key+    -> Integer -- ^ start+    -> Integer -- ^ stop+    -> m (f Integer)+zremrangebyrank key start stop = sendRequest (["ZREMRANGEBYRANK"] ++ [encode key] ++ [encode start] ++ [encode stop] )++set+    :: (RedisCtx m f)+    => ByteString -- ^ key+    -> ByteString -- ^ value+    -> m (f Status)+set key value = sendRequest (["SET"] ++ [encode key] ++ [encode value] )++lpush+    :: (RedisCtx m f)+    => ByteString -- ^ key+    -> [ByteString] -- ^ value+    -> m (f Integer)+lpush key value = sendRequest (["LPUSH"] ++ [encode key] ++ map encode value )   
src/Database/Redis/Core.hs view
@@ -7,7 +7,7 @@     Redis(),runRedis,     RedisCtx(..), MonadRedis(..),     send, recv, sendRequest,-    auth+    auth, select ) where  import Prelude hiding (catch)@@ -121,6 +121,8 @@     -- ^ When the server is protected by a password, set 'connectAuth' to 'Just'     --   the password. Each connection will then authenticate by the 'auth'     --   command.+    , connectDatabase       :: Integer+    -- ^ Each connection will 'select' the database with the given index.     , connectMaxConnections :: Int     -- ^ Maximum number of connections to keep open. The smallest acceptable     --   value is 1.@@ -137,6 +139,7 @@ --  connectHost           = \"localhost\" --  connectPort           = PortNumber 6379 -- Redis default port --  connectAuth           = Nothing         -- No password+--  connectDatabase       = 0               -- SELECT database 0 --  connectMaxConnections = 50              -- Up to 50 connections --  connectMaxIdleTime    = 30              -- Keep open for 30 seconds -- @@@ -146,6 +149,7 @@     { connectHost           = "localhost"     , connectPort           = PortNumber 6379     , connectAuth           = Nothing+    , connectDatabase       = 0     , connectMaxConnections = 50     , connectMaxIdleTime    = 30     }@@ -158,9 +162,13 @@   where     create = do         conn <- PP.connect connectHost connectPort reply-        maybe (return ())-            (void . runRedisInternal conn . auth)-            connectAuth+        runRedisInternal conn $ do+            -- AUTH+            case connectAuth of+                Nothing   -> return ()+                Just pass -> void $ auth pass+            -- SELECT+            when (connectDatabase /= 0) (void $ select connectDatabase)         return conn      destroy = PP.disconnect@@ -170,3 +178,10 @@     :: B.ByteString -- ^ password     -> Redis (Either Reply Status) auth password = sendRequest ["AUTH", password]++-- The SELECT command. Used in 'connect'.+select+    :: RedisCtx m f+    => Integer -- ^ index+    -> m (f Status)+select ix = sendRequest ["SELECT", encode ix]