2014-10-07 43 views
7

爲什麼不打印'你好'?如何從Redis Lua腳本輸出到控制檯?

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

在Windows 7

我打電話從Jedis Lua腳本在Mac OS X,2.8.12運行2.8.14。發展這些就像建造一艘船,戴着連指手套,而有人在我的臉上打孔。我的最終目標是以某種方式通過打印跟蹤語句,調試等來重新創建一個半功能開發堆棧。

我的解決方法是爲我的Lua腳本使用名爲'log'的Redis列表,將其返回給Jedis,然後轉儲內容。有點兒像這樣:

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

... 

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

預先感謝任何提示,幫助等

更新:只注意到了通過對Redis的服務器可執行的終端窗口「你好」不輸出。聰明。所以現在我是一個終端,每個用於redis-server,redis-cli interactive和redis-cli monitor。

更新2:只要想通了,我可以還挺打印跟蹤語句像這樣Redis的-CLI顯示器:

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

這看起來有點像這樣:

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

回答

10

面掌摑。最後想出了這裏的redis.log(loglevel,message)。這也寫入到redis服務器的控制檯輸出。

特別感謝有幫助的匿名下來的選民。你是一個優秀的人。

+3

我最近張貼了這個集合的這都是爲了在跟蹤和調試,以幫助方法在Redis的Lua - 希望它有助於:) https://redislabs.com/blog/5-methods-for-tracing-and-debugging-redis-lua-scripts – 2014-12-09 09:14:40

+0

像下來的選民評論 - yah巨魔擊敗新手。 .. geeze – chrislovecnm 2015-01-30 08:47:39

1

有更好的方法來開發針對redis的LUA腳本。

使用lua日誌是一種方法。但是您也可以通過訂閱來在調試主題上發佈「按需」日誌。

您還可以設置與盧阿破發點,一個IDE我認爲這是發展的最佳解決方案:http://www.trikoder.net/blog/make-lua-debugging-easier-in-redis-87/

另外,不要忘了自動測試,單元和/或集成測試是有幫助的(針對執行調試redis實例)。

1

使用jedis,這裏是你如何做到這一點.. 這是一個使用set和get命令的例子.. 你需要在classpath中包含jedis-2.6.0 jar文件。

//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")); 
} 

} 

輸出: 連接到服務器成功地 存儲的字符串(B4 LUA):一個 存儲的字符串:乙