hedis 0.6.3 → 0.6.4
raw patch · 4 files changed
+419/−442 lines, 4 files
Files
- hedis.cabal +2/−34
- src/Database/Redis.hs +1/−1
- src/Database/Redis/Commands.hs +397/−403
- src/Database/Redis/Core.hs +19/−4
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]