2014-10-07 4 views
7

Почему это не печатает «привет»?Как вывести на консоль из сценария Redis Lua?

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

Запуск 2.8.14 на Mac OS X, 2.8.12 на Windows 7.

Я звоню Lua скрипты Jedis. Развить их - это как построить корабль с бутылкой, носить варежки, а кто-то ударил меня в лицо. Моя конечная цель - как-то воссоздать полуфункциональный стек разработки с помощью команд print trace, debug, что угодно.

Мое обходное решение для моего сценария Lua - это список Redis, называемый «log», возвращающий его в 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) 

Заранее спасибо за любые советы, помощь и т.д.

Update: Просто заметил, что «привет» делает вывод через окно терминала для Redis-сервер исполняемого файла. Умная. Итак, теперь я терминал каждый для redis-сервера, redis-cli interactive и redis-cli monitor.

Update 2: Просто понял, что я могу напечатать своего рода заявления следовые к Redis-кли монитор, как это:

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

Я недавно опубликовал эту коллекцию методов, которые все призваны помочь в отслеживании и отладки Lua в Redis - надеюсь, что это поможет :) https://redislabs.com/blog/5-methods-for-tracing-and-debugging-redis-lua-scripts –

+0

Как нисходящий комментарий избирателя - yah troll beat на новичке. .. geeze – chrislovecnm

1

Есть более эффективные способы разработки сценариев LUA против redis.

Использование lua logs - один из способов. Но вы также можете опубликовать в теме отладки журналы «по требованию», подписавшись на него.

Вы также можете настроить учетную IDE с точками Lua перерыв, который я думаю, что это лучшее решение для развития: http://www.trikoder.net/blog/make-lua-debugging-easier-in-redis-87/

Кроме того, не забывайте, автоматическое тестирование, устройство и/или интеграционные тесты полезны (исполнение против debug redis instance).

1

Использование jedis, вот как вы можете это сделать. это пример использования команд set и get. вам нужно включить jar-файл jedis-2.6.0 в путь к классам.

//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): а Сохраненная строка: б

Смежные вопросы