使用JRedis客户端的Hello World示例

时间:2011-03-11 06:29:28

标签: redis

我想将Redis与Java一起使用,所以我从this简单示例开始(参见下面的代码)。

第一次运行将一个键值对插入数据库,第二次运行应该获取值并将其打印到屏幕。有两个问题我不明白:

  1. 当我插入密钥时,它会输出一个错误,表示该值不是命令:“错误响应PING => ERR未知命令”Hello Again!“。这对我没有意义 - 为什么它认为String值是一个命令?

  2. 当我第二次运行它来打印键的值时,它只打印值的长度,但我希望看到“Hello Again!”打印。

  3. 感谢您的帮助!

    以下是代码:

    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 个答案:

答案 0 :(得分:1)

好的,我没有得到任何答案,也试过这个例子的作者,但没有运气。我做了一些阅读,发现jedis是Redis更好的Java客户端。我尝试了它,它完美地工作;使用起来非常简单。

答案 1 :(得分:1)

作者忙于他的日常工作,实际上也是在傍晚时分。我相信你明白了。

我看过Jedis并且它是一个非常好的客户端并且具有非常出色的性能,并且该帖子提供了更多的功能集(参见上文);但我没有看到任何使用复杂性的降低。 JRedis的API是Redis命令集 - 不多也不少。 JRedis对某些人来说可能看起来“复杂”,但有经验的用户会认识到它的模块化设计是允许你使用它而不仅仅是客户端,如果你选择,例如,使用JRedis RI组件编写你自己的专用客户端例如协议,连接器等。

您遇到的问题是Redis服务器版本(其有线协议发生变化)与JRedis版本不匹配。 JRedis的当前主分支已更新为符合Redis 2.2.n.与往常一样,请阅读项目根目录下的合规性说明,以确保使用正确匹配的Redis服务器。