105 lines
		
	
	
		
			3.7 KiB
		
	
	
	
		
			Factor
		
	
	
		
		
			
		
	
	
			105 lines
		
	
	
		
			3.7 KiB
		
	
	
	
		
			Factor
		
	
	
| 
								 | 
							
								! Copyright (C) 2009 Bruno Deferrari
							 | 
						||
| 
								 | 
							
								! See http://factorcode.org/license.txt for BSD license.
							 | 
						||
| 
								 | 
							
								USING: io io.crlf kernel math.parser sequences strings interpolate locals ;
							 | 
						||
| 
								 | 
							
								IN: redis.command-writer
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								<PRIVATE
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								GENERIC: write-value-with-length ( value -- )
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								M: string write-value-with-length
							 | 
						||
| 
								 | 
							
								    [ length number>string write crlf ]
							 | 
						||
| 
								 | 
							
								    [ write ] bi ;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								: space ( -- ) CHAR: space write1 ;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								: write-key/value ( value key -- )
							 | 
						||
| 
								 | 
							
								    write space
							 | 
						||
| 
								 | 
							
								    write-value-with-length ;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								: write-key/integer ( integer key -- )
							 | 
						||
| 
								 | 
							
								    write space
							 | 
						||
| 
								 | 
							
								    number>string write ;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								PRIVATE>
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								#! Connection
							 | 
						||
| 
								 | 
							
								: quit ( -- ) "QUIT" write crlf ;
							 | 
						||
| 
								 | 
							
								: ping ( -- ) "PING" write crlf ;
							 | 
						||
| 
								 | 
							
								: auth ( password -- ) "AUTH " write write crlf ;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								#! String values
							 | 
						||
| 
								 | 
							
								: set ( value key -- ) "SET " write write-key/value crlf ;
							 | 
						||
| 
								 | 
							
								: get ( key -- ) "GET " write write crlf ;
							 | 
						||
| 
								 | 
							
								: getset ( value key -- ) "GETSET " write write-key/value crlf ;
							 | 
						||
| 
								 | 
							
								: mget ( keys -- ) "MGET " write " " join write crlf ;
							 | 
						||
| 
								 | 
							
								: setnx ( value key -- ) "SETNX " write write-key/value crlf ;
							 | 
						||
| 
								 | 
							
								: incr ( key -- ) "INCR " write write crlf ;
							 | 
						||
| 
								 | 
							
								: incrby ( integer key -- ) "INCRBY " write write-key/integer crlf ;
							 | 
						||
| 
								 | 
							
								: decr ( key -- ) "DECR " write write crlf ;
							 | 
						||
| 
								 | 
							
								: decrby ( integer key -- ) "DECRBY " write write-key/integer crlf ;
							 | 
						||
| 
								 | 
							
								: exists ( key -- ) "EXISTS " write write crlf ;
							 | 
						||
| 
								 | 
							
								: del ( key -- ) "DEL " write write crlf ;
							 | 
						||
| 
								 | 
							
								: type ( key -- ) "TYPE " write write crlf ;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								#! Key space
							 | 
						||
| 
								 | 
							
								: keys ( pattern -- ) "KEYS " write write crlf ;
							 | 
						||
| 
								 | 
							
								: randomkey ( -- ) "RANDOMKEY" write crlf ;
							 | 
						||
| 
								 | 
							
								: rename ( newkey key -- ) "RENAME " write write space write crlf ;
							 | 
						||
| 
								 | 
							
								: renamenx ( newkey key -- ) "RENAMENX " write write space write crlf ;
							 | 
						||
| 
								 | 
							
								: dbsize ( -- ) "DBSIZE" write crlf ;
							 | 
						||
| 
								 | 
							
								: expire ( integer key -- ) "EXPIRE " write write-key/integer crlf ;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								#! Lists
							 | 
						||
| 
								 | 
							
								: rpush ( value key -- ) "RPUSH " write write-key/value crlf ;
							 | 
						||
| 
								 | 
							
								: lpush ( value key -- ) "LPUSH " write write-key/value crlf ;
							 | 
						||
| 
								 | 
							
								: llen ( key -- ) "LLEN " write write crlf ;
							 | 
						||
| 
								 | 
							
								: lrange ( start end key -- )
							 | 
						||
| 
								 | 
							
								    "LRANGE " write write [ space number>string write ] bi@ crlf ;
							 | 
						||
| 
								 | 
							
								: ltrim ( start end key -- )
							 | 
						||
| 
								 | 
							
								    "LTRIM " write write [ space number>string write ] bi@ crlf ;
							 | 
						||
| 
								 | 
							
								: lindex ( integer key -- ) "LINDEX " write write-key/integer crlf ;
							 | 
						||
| 
								 | 
							
								: lset ( value index key -- )
							 | 
						||
| 
								 | 
							
								    "LSET " write write-key/integer space write-value-with-length crlf ;
							 | 
						||
| 
								 | 
							
								: lrem ( value amount key -- )
							 | 
						||
| 
								 | 
							
								    "LREM " write write-key/integer space write-value-with-length crlf ;
							 | 
						||
| 
								 | 
							
								: lpop ( key -- ) "LPOP " write write crlf ;
							 | 
						||
| 
								 | 
							
								: rpop ( key -- ) "RPOP " write write crlf ;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								#! Sets
							 | 
						||
| 
								 | 
							
								: sadd ( member key -- )
							 | 
						||
| 
								 | 
							
								    "SADD " write write space write-value-with-length crlf ;
							 | 
						||
| 
								 | 
							
								: srem  ( member key -- )
							 | 
						||
| 
								 | 
							
								    "SREM " write write space write-value-with-length crlf ;
							 | 
						||
| 
								 | 
							
								: smove ( member newkey key -- )
							 | 
						||
| 
								 | 
							
								    "SMOVE " write write space write space write-value-with-length crlf ;
							 | 
						||
| 
								 | 
							
								: scard ( key -- ) "SCARD " write write crlf ;
							 | 
						||
| 
								 | 
							
								: sismember ( member key -- )
							 | 
						||
| 
								 | 
							
								    "SISMEMBER " write write space write-value-with-length crlf ;
							 | 
						||
| 
								 | 
							
								: sinter ( keys -- ) "SINTER " write " " join write crlf ;
							 | 
						||
| 
								 | 
							
								: sinterstore ( keys destkey -- )
							 | 
						||
| 
								 | 
							
								    "SINTERSTORE " write write space " " join write crlf ;
							 | 
						||
| 
								 | 
							
								: sunion ( keys -- ) "SUNION " write " " join write crlf ;
							 | 
						||
| 
								 | 
							
								: sunionstore ( keys destkey -- )
							 | 
						||
| 
								 | 
							
								    "SUNIONSTORE " write write " " join space write crlf ;
							 | 
						||
| 
								 | 
							
								: smembers ( key -- ) "SMEMBERS " write write crlf ;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								#! Multiple db
							 | 
						||
| 
								 | 
							
								: select ( integer -- ) "SELECT " write number>string write crlf ;
							 | 
						||
| 
								 | 
							
								: move ( integer key -- ) "MOVE " write write-key/integer crlf ;
							 | 
						||
| 
								 | 
							
								: flushdb ( -- ) "FLUSHDB" write crlf ;
							 | 
						||
| 
								 | 
							
								: flushall ( -- ) "FLUSHALL" write crlf ;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								#! Sorting
							 | 
						||
| 
								 | 
							
								! sort
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								#! Persistence control
							 | 
						||
| 
								 | 
							
								: save ( -- ) "SAVE" write crlf ;
							 | 
						||
| 
								 | 
							
								: bgsave ( -- ) "BGSAVE" write crlf ;
							 | 
						||
| 
								 | 
							
								: lastsave ( -- ) "LASTSAVE" write crlf ;
							 | 
						||
| 
								 | 
							
								: shutdown ( -- ) "SHUTDOWN" write crlf ;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								#! Remote server control
							 | 
						||
| 
								 | 
							
								: info ( -- ) "INFO" write crlf ;
							 | 
						||
| 
								 | 
							
								: monitor ( -- ) "MONITOR" write crlf ;
							 |