2014-10-07 19 views
7

Perché questo non stampa 'ciao'?Come eseguire l'output su console dallo script Redis Lua?

$ redis-cli 
127.0.0.1:6379> eval "print('hello')" 0 
(nil) 
127.0.0.1:6379> 

esecuzione 2.8.14 su Mac OS X, 2.8.12 su Windows 7.

sto chiamando script Lua da Jedi. Sviluppare questi è come costruire una nave una bottiglia, indossare guanti, mentre qualcuno mi dà un pugno in faccia. Il mio obiettivo finale è in qualche modo ricreare uno stack di sviluppo semi-funzionale tramite istruzioni trace print, debug, qualsiasi cosa.

La mia soluzione è per il mio script Lua è utilizzare un elenco Redis chiamato "registro", restituirlo a Jedis e quindi scaricare il contenuto. Un po 'come questo:

redis.call('del', 'log') 
redis.call('rpush', 'log', 'trace statement 1') 
redis.call('rpush', 'log', 'trace statement 2') 

... 

redis.call('lrange', 'log', 0, -1) 

Grazie in anticipo per eventuali suggerimenti, aiuto, ecc

Aggiornamento: Appena notato l'uscita 'ciao' fa tramite la finestra del terminale per l'eseguibile Redis-server. Intelligente. Così ora ho un terminale ciascuno per redis-server, redis-cli interattivo e monitor redis-cli.

Aggiornamento 2: appena capito che posso genere di stampare istruzioni trace al monitor Redis-cli come questo:

eval "redis.call('echo', 'ugh')" 0 

che appare un po 'come questo:

123.456 [0 127.0.0.1:57709] "eval" "redis.call('echo', 'ugh')" "0" 
123.456 [0 lua] "echo" "ugh" 

risposta

10

Volto di palma schiaffo. Finalmente capito che c'è redis.log (loglevel, messaggio). Che scrive anche sull'output della console redis-server.

Un ringraziamento speciale a un utile elettore anonimo. Sei un essere umano superiore.

+3

ho recentemente pubblicato questa collezione di metodi che sono tutti finalizzati ad aiutare a rintracciare e debugging Lua in Redis - spero che aiuti :) https://redislabs.com/blog/5-methods-for-tracing-and-debugging-redis-lua-scripts –

+0

Come il commento dell'elettore in basso - yah troll ha battuto il newbie. .. geeze – chrislovecnm

1

Esistono modi migliori per sviluppare script LUA contro i redis.

L'utilizzo dei log di lua è a senso unico. Ma puoi anche pubblicare su un argomento di debug per avere registri "su richiesta" iscrivendoti ad esso.

È possibile anche impostare un IDE con punti di rottura lua che credo sia la soluzione migliore per lo sviluppo: http://www.trikoder.net/blog/make-lua-debugging-easier-in-redis-87/

Inoltre, non dimenticare di test automatici, unità e/o test di integrazione sono utili (esecuzione nei confronti di un debug redis instance).

1

utilizzando jedis, ecco come è possibile farlo .. questo è un esempio per utilizzare set e ottenere comandi .. è necessario includere il file jar jedis-2.6.0 in classpath.

//jar file - jedis-2.6.0.jar 

import redis.clients.jedis.Jedis; 
public class MainClass { 

public static void main(String[] args){ 
    Jedis jedis = new Jedis("localhost"); 
    System.out.println("Connection to server sucessfully"); 
    jedis.set("name", "a"); 
    System.out.println("Stored string (b4 lua) : "+ jedis.get("name")); 
    String script="redis.call('set','name','b')"; 
    jedis.eval(script); 
    System.out.println("Stored string : "+ jedis.get("name")); 
} 

} 

uscita: Connessione al server con successo stringa memorizzata (b4 lua): una stringa memorizzata : b

Problemi correlati