Пример Hello World с использованием клиента JRedis - PullRequest
0 голосов
/ 11 марта 2011

Я хочу использовать Redis с Java, поэтому я начал с этого простого примера (см. Код ниже).

Первый прогон вставляет пару ключ-значение в базу данных, а второй прогон должен получить значение и распечатать его на экране. Есть две проблемы, которые я не понимаю:

  1. Когда я вставляю ключ, он выводит ошибку, что значение не является командой: «Ответ об ошибке для PING => ERR неизвестная команда« Здравствуйте снова! ». Это не имеет смысла для меня - почему считает ли он, что значение String является командой?

  2. Когда я запускаю его во второй раз, чтобы напечатать значение для ключа, он печатает только длину значения, но я ожидал увидеть «Hello Again!» распечатаны.

Спасибо за помощь!

Вот код:

import org.jredis.ClientRuntimeException;
import org.jredis.JRedis;
import org.jredis.ProviderException;
import org.jredis.RedisException;
import org.jredis.protocol.Command;
import org.jredis.ri.alphazero.JRedisClient;
import static org.jredis.ri.alphazero.support.DefaultCodec.*;

/**
 * [TODO: document me!]
 *
 * @author  Joubin Houshyar (alphazero@sensesay.net)
 * @version alpha.0, Apr 15, 2009
 * @since   alpha.0
 * 
 */

public class HelloAgain {
    public static final String key = "jredis::examples::HelloAgain::message";
    public static void main(String[] args) {
        String password = "";
        if(args.length > 0) password  = args[0];
        new HelloAgain().run(password);
    }

    private void run(String password) {
        try {
            JRedis  jredis = new JRedisClient("localhost", 6379, "jredis", 0);
            jredis.ping();

            if(!jredis.exists(key)) {
                jredis.set(key, "Hello Again!");
                System.out.format("Hello!  You should run me again!\n");
            }
            else {
                String msg = toStr ( jredis.get(key) );
                System.out.format("%s\n", msg);
            }
            jredis.quit();
        }
        catch (RedisException e){
            if (e.getCommand()==Command.PING){
                System.out.format("I'll need that password!  Try again with password as command line arg for this program.\n");
            }
        }
        catch (ProviderException e){
            System.out.format("Oh no, an 'un-documented feature':  %s\nKindly report it.", e.getMessage());
        }
        catch (ClientRuntimeException e){
            System.out.format("%s\n", e.getMessage());
        }
    }
}

Ответы [ 2 ]

1 голос
/ 02 мая 2011

Автор был занят своей дневной работой, которая фактически охватывала и вечерние часы. Я уверен, что вы понимаете.

Я посмотрел на Jedis, и это очень хороший клиент, он имеет довольно отличную производительность и на данный момент предоставляет больший набор функций (см. Выше); но я не вижу никакого снижения сложности в использовании. API JRedis - это набор команд Redis - ни больше, ни меньше. Для некоторых JRedis может показаться «сложным», но опытные пользователи поймут, что его модульная конструкция позволяет использовать его не только для клиента, если вы решите, например, написать свой собственный специализированный клиент с использованием компонентов JRedis RI. такие как протокол, соединитель и т. д.

Проблема, с которой вы столкнулись, связана с несоответствием между версией сервера Redis, в которой был изменен проводной протокол, и версией JRedis. Текущая основная ветка JRedis была обновлена ​​для соответствия Redis 2.2.n. Как всегда, прочитайте примечание о соответствии в корневом каталоге проекта, чтобы убедиться, что вы используете правильно подобранный сервер Redis.

1 голос
/ 12 марта 2011

Хорошо, я не получил никакого ответа, а также попробовал автора этого примера, но безуспешно. Я немного почитал и обнаружил, что jedis - лучший Java-клиент для Redis. Я попробовал это, и это работает отлично; очень прост в использовании.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...