2015-11-25 2 views
0

Я относительно новичок в redis. Я разрабатываю API для отдыха, чтобы получить весь набор данных в redis db.Получение всех данных в redis от redisTemplate

Я использовал ниже код, чтобы получить все ключи

общественности Карта getAllRedisData() {

Map<Object, Object> map = new HashMap<>(); 
    Set<byte[]> keys = redisService.getTemplate().getConnectionFactory().getConnection().keys("*".getBytes()); 
    Iterator<byte[]> it = keys.iterator(); 

    while(it.hasNext()){ 
     byte[] data = (byte[])it.next(); 
     // String key = new String(data,0,data.length); 
     Object key = null; 
     try { 
      key = getObjectFromByteArray(data); 
      System.out.println(key); 
     } catch (ClassNotFoundException e) { 
      // TODO Auto-generated catch block 
      e.printStackTrace(); 
     } catch (IOException e) { 
      // TODO Auto-generated catch block 
      e.printStackTrace(); 
     } 
    }  
    return map; 
} 

private Object getObjectFromByteArray(byte[] bytes) throws IOException, ClassNotFoundException 
{ 
    try (ByteArrayInputStream bis = new ByteArrayInputStream(bytes); 
     ObjectInput in = new ObjectInputStream(bis)) { 
     return in.readObject(); 
    } 
} 

Я был в состоянии получить все ключи, но не был в состоянии получить значение для всех ключи. Ниже приведен подход «Значение объекта = redisService.getTemplate(). OpsForValue(). Get (" ");

Я думаю, это потому, что некоторые ключи имеют разные типы данных.

Дайте мне знать, если мне нужно изменить/изменить свой подход.

ответ

0

Первый ключей не должен использоваться в производстве. Вместо этого вы можете использовать команду scan.

Если у вас есть ключ, вы можете вызвать команду redis type, чтобы получить DataType для объекта.

DataType -> NONE, STRING, LIST, SET, ZSET, HASH 

Тогда вы можете вызвать правильную функцию, чтобы получить данные

На больших наборах данных это может занять некоторое время. Вы уверены, что останетесь api, чтобы получить все данные в redis? Вы можете использовать шаблон с проверкой только для получения данных, которые вам действительно нужны.

0

я не проверял, но попробовать этот

try { 
     Object value = getObjectFromByteArray(redisService.getTemplate().getConnectionFactory().getConnection().get(data)); 
     key = getObjectFromByteArray(data); 
     System.out.println(key); 
    } catch (ClassNotFoundException e) { 
     // TODO Auto-generated catch block 
     e.printStackTrace(); 
    } catch (IOException e) { 
     // TODO Auto-generated catch block 
     e.printStackTrace(); 
    } 
Смежные вопросы