2015-05-10 2 views
1

У меня есть установка узла кластера с тремя узлами EC2 redis, и я пытаюсь добавить записи в redis (используя sadd) с режимом конвейера.JedisMovedDataException (При использовании sadd с конвейером)

я получаю следующее сообщение об ошибке после добавления около 70/82 и 81 ключей в 3-х узлов:

Exception in thread "main" redis.clients.jedis.exceptions.JedisMovedDataException: MOVED 1539 172.31.59.103:6379 
at redis.clients.jedis.Protocol.processError(Protocol.java:93) 
at redis.clients.jedis.Protocol.process(Protocol.java:122) 
at redis.clients.jedis.Protocol.read(Protocol.java:191) 
at redis.clients.jedis.Connection.getOne(Connection.java:258) 
at redis.clients.jedis.ShardedJedisPipeline.sync(ShardedJedisPipeline.java:44) 
at org.hu.e63.MovieLens21MPipeline.push(MovieLens21MPipeline.java:47) 
at org.hu.e63.MovieLens21MPipeline.main(MovieLens21MPipeline.java:53 

Я посмотрел на this нить, мой код довольно много выглядит так:

Входной файл отсюда (ratings.csv): http://files.grouplens.org/datasets/movielens/ml-latest-small.zip

Вот код:

import java.io.File; 
import java.util.ArrayList; 
import java.util.List; 
import java.util.Scanner; 

import redis.clients.jedis.JedisShardInfo; 
import redis.clients.jedis.ShardedJedis; 
import redis.clients.jedis.ShardedJedisPipeline; 

public class MovieLens21MPipeline { 
    ShardedJedis jedis; 

    public MovieLens21MPipeline() { 
     JedisShardInfo si = new JedisShardInfo("172.31.59.103", 6379, 5000); 
     List<JedisShardInfo> list = new ArrayList<JedisShardInfo>(); 
     list.add(si); 
     list.add(new JedisShardInfo("172.31.59.104", 6379, 5000)); 
     list.add(new JedisShardInfo("172.31.59.105", 6379, 5000)); 

     jedis = new ShardedJedis(list); 
    } 

    public void push() { 
     ShardedJedisPipeline pipeline = jedis.pipelined(); 
     Scanner s; 

     try { 
      s = new Scanner(new File("input/ratings.csv")); 

      StringBuilder key = new StringBuilder(); 
      String s1 = s.nextLine(); // Skip first line 
      while (s.hasNextLine()) { 
       s1 = s.nextLine(); 
       String[] spl = s1.split(","); 
       // key="u:"+spl[0]+":m"; 
       key.append("u:").append(spl[0]).append(":m"); 
       pipeline.sadd(key.toString(), spl[1]); 
       key.setLength(0); 
      } 
     } catch (Exception e) { 
      // TODO Auto-generated catch block 
      System.out.println("bye" + e.getMessage()); 
     } 

     pipeline.sync(); 
    } 

    public static void main(String[] args) { 
     MovieLens21MPipeline obj = new MovieLens21MPipeline(); 
     long startTime = System.currentTimeMillis(); 
     obj.push(); 
     long endTime = System.currentTimeMillis(); 
     double d = 0.0; 
     d = (double) (endTime - startTime); 
     System.out.println("Throughput: " + d); 
    } 
} 

Любая помощь приветствуется. Спасибо

ответ

2

MOVED указывает, что вы используете Redis Cluster. ShardedJedis не для Redis Cluster, поэтому вместо этого вы должны использовать JedisCluster. Обратите внимание, что JedisCluster не имеет режима конвейера, поэтому вы можете отправить свою операцию по очереди.

Надеюсь, это поможет.