124 lines
4.3 KiB
Factor
124 lines
4.3 KiB
Factor
! Copyright (C) 2009 Bruno Deferrari
|
|
! See http://factorcode.org/license.txt for BSD license.
|
|
USING: arrays assocs formatting io io.crlf kernel math
|
|
math.parser sequences strings locals ;
|
|
IN: redis.command-writer
|
|
|
|
<PRIVATE
|
|
|
|
GENERIC: write-resp ( value -- )
|
|
|
|
M: string write-resp ( string -- )
|
|
[ length ] keep "$%s\r\n%s\r\n" printf ;
|
|
|
|
M: integer write-resp ( integer -- )
|
|
":%s\r\n" printf ;
|
|
|
|
M: sequence write-resp ( sequence -- )
|
|
[ length "*%s\r\n" printf ] keep
|
|
[ write-resp ] each ;
|
|
|
|
: write-command ( sequence command -- )
|
|
suffix reverse
|
|
[ dup number? [ number>string ] when ] map
|
|
write-resp ;
|
|
|
|
PRIVATE>
|
|
|
|
! Connection
|
|
: quit ( -- ) { "QUIT" } write-resp ;
|
|
: ping ( -- ) { "PING" } write-resp ;
|
|
: auth ( password -- ) 1array "AUTH" write-command ;
|
|
|
|
! String values
|
|
: set ( value key -- ) 2array "SET" write-command ;
|
|
: get ( key -- ) 1array "GET" write-command ;
|
|
: getset ( value key -- ) 2array "GETSET" write-command ;
|
|
: mget ( keys -- ) reverse "MGET" write-command ;
|
|
: setnx ( value key -- ) 2array "SETNX" write-command ;
|
|
: incr ( key -- ) 1array "INCR" write-command ;
|
|
: incrby ( integer key -- ) 2array "INCRBY" write-command ;
|
|
: decr ( key -- ) 1array "DECR" write-command ;
|
|
: decrby ( integer key -- ) 2array "DECRBY" write-command ;
|
|
: exists ( key -- ) 1array "EXISTS" write-command ;
|
|
: del ( key -- ) 1array "DEL" write-command ;
|
|
: type ( key -- ) 1array "TYPE" write-command ;
|
|
|
|
! Key space
|
|
: keys ( pattern -- ) 1array "KEYS" write-command ;
|
|
: randomkey ( -- ) { "RANDOMKEY" } write-resp ;
|
|
: rename ( newkey key -- ) 2array "RENAME" write-command ;
|
|
: renamenx ( newkey key -- ) 2array "RENAMENX" write-command ;
|
|
: dbsize ( -- ) { "DBSIZE" } write-resp ;
|
|
: expire ( integer key -- ) 2array "EXPIRE" write-command ;
|
|
|
|
! Lists
|
|
: rpush ( value key -- ) 2array "RPUSH" write-command ;
|
|
: lpush ( value key -- ) 2array "LPUSH" write-command ;
|
|
: llen ( key -- ) 1array "LLEN" write-command ;
|
|
: lrange ( start end key -- )
|
|
swapd 3array "LRANGE" write-command ;
|
|
: ltrim ( start end key -- )
|
|
swapd 3array "LTRIM" write-command ;
|
|
: lindex ( integer key -- ) 2array "LINDEX" write-command ;
|
|
: lset ( value index key -- ) 3array "LSET" write-command ;
|
|
: lrem ( value amount key -- ) 3array "LREM" write-command ;
|
|
: lpop ( key -- ) 1array "LPOP" write-command ;
|
|
: rpop ( key -- ) 1array "RPOP" write-command ;
|
|
|
|
! Sets
|
|
: sadd ( member key -- ) 2array "SADD" write-command ;
|
|
: srem ( member key -- ) 2array "SREM" write-command ;
|
|
: smove ( member newkey key -- )
|
|
3array "SMOVE" write-command ;
|
|
: scard ( key -- ) 1array "SCARD" write-command ;
|
|
: sismember ( member key -- )
|
|
2array "SISMEMBER" write-command ;
|
|
: sinter ( keys -- ) reverse "SINTER" write-command ;
|
|
: sinterstore ( keys destkey -- )
|
|
[ reverse ] dip suffix "SINTERSTORE" write-command ;
|
|
: sunion ( keys -- ) reverse "SUNION" write-command ;
|
|
: sunionstore ( keys destkey -- )
|
|
[ reverse ] dip suffix "SUNIONSTORE" write-command ;
|
|
: smembers ( key -- ) 1array "SMEMBERS" write-command ;
|
|
|
|
! Hashes
|
|
: hdel ( field key -- ) 2array "HDEL" write-command ;
|
|
: hexists ( field key -- ) 2array "HEXISTS" write-command ;
|
|
: hget ( field key -- ) 2array "HGET" write-command ;
|
|
: hgetall ( key -- ) 1array "HGETALL" write-command ;
|
|
: hincrby ( integer field key -- )
|
|
3array "HINCRBY" write-command ;
|
|
: hincrbyfloat ( float field key -- )
|
|
3array "HINCRBYFLOAT" write-command ;
|
|
: hkeys ( key -- ) 1array "HKEYS" write-command ;
|
|
: hlen ( key -- ) 1array "HLEN" write-command ;
|
|
: hmget ( seq key -- ) prefix reverse "HMGET" write-command ;
|
|
: hmset ( assoc key -- )
|
|
[
|
|
>alist concat reverse
|
|
] dip suffix "HMSET" write-command ;
|
|
: hset ( value field key -- ) 3array "HSET" write-command ;
|
|
: hsetnx ( value field key -- )
|
|
3array "HSETNX" write-command ;
|
|
: hvals ( key -- ) 1array "HVALS" write-command ;
|
|
|
|
! Multiple db
|
|
: select ( integer -- ) 1array "SELECT" write-command ;
|
|
: move ( integer key -- ) 2array "MOVE" write-command ;
|
|
: flushdb ( -- ) { "FLUSHDB" } write-resp ;
|
|
: flushall ( -- ) { "FLUSHALL" } write-resp ;
|
|
|
|
! Sorting
|
|
! sort
|
|
|
|
! Persistence control
|
|
: save ( -- ) { "SAVE" } write-resp ;
|
|
: bgsave ( -- ) { "BGSAVE" } write-resp ;
|
|
: lastsave ( -- ) { "LASTSAVE" } write-resp ;
|
|
: shutdown ( -- ) { "SHUTDOWN" } write-resp ;
|
|
|
|
! Remote server control
|
|
: info ( -- ) { "INFO" } write-resp ;
|
|
: monitor ( -- ) { "MONITOR" } write-resp ;
|