2015-04-09 6 views
1

Я хочу получить как ключи, так и значения. Теперь я делаю это вот так:как получить обе клавиши и значения при использовании команды «red» команды redis

Set<String> keys = redisTemplate.keys("Tom*"); 
if (keys != null) { 

    //get them one by one 
    for (String key : keys) { 
     String value = redisTemplate.opsForValue().get(key); 
    } 
} 

Сначала я должен получить все ключи, которые начинаются с буквы «abc». Во-вторых, я получаю значения один за другим.

Могу ли я получить оба ключа и значения за один раз?

UPDATE:

Спасибо soveran.
У меня есть некоторые свойства, связанные с каждым пользователем:

1)Tom.loginTimes=3 
2)Tom.tradeMoneyCount=100 

Перед тем, как определить две отдельные клавиши: Tom.loginTimes и Tom.tradeMoneyCount. Теперь я думаю, что я должен использовать hmset:

10.75.201.3:63790> hmset Tom loginTimes 3 tradeMoneyCount 100 
OK 
10.75.201.3:63790> hgetall Tom 
1) "loginTimes" 
2) "3" 
3) "tradeMoneyCount" 
4) "100" 

Спасибо.

+0

вы не можете, но убедитесь, что вы читали «Предупреждение» примечание в документации для 'KEYS' команды: http://redis.io/commands/ ключи – soveran

+0

Можете ли вы описать свой вариант использования? Может быть, мы придумаем другое решение. – soveran

+0

мы хотим что-то вроде: select * from table_name, где column_name нравится 'abc *'. Теперь мне интересно, как я могу это сделать в redis. – bylijinnan

ответ

1

hashes - это правильный способ сделать это.

Что касается команды keys, она была добавлена ​​в redis для целей отладки и не предназначена для использования в производстве. Вот предупреждение от redis docs for keys command:

Внимание: считают KEYS как команда, которая должна использоваться только в производственных условиях с крайней осторожностью. Это может привести к потере производительности при работе с большими базами данных. Эта команда предназначена для отладки и специальных операций, таких как изменение вашего расположения в виде ключа. Не используйте KEYS в вашем обычном коде приложения . Если вы ищете способ найти ключи в подмножестве вашего ключевого пространства, рассмотрите возможность использования SCAN или sets.

+0

, но использовать RedisTemplate в Spring-data для «hgetall» - это странно странно: Map entries = redisTemplate.boundHashOps (name) .entries(); см: HTTP: //stackoverflow.com/questions/17230205/spring-data-redis-hgetall-operation – bylijinnan

1

Вы можете использовать код ниже, чтобы получить все ключи одновременно, и он возвращает набор ключей. Я использую Spring Redis API:

public StringBuffer getAllKeys() { 

     System.out.println("get all keys"); 

     StringBuffer sb = new StringBuffer(); 

     Set<byte[]> keys = redisTemplate.getConnectionFactory().getConnection().keys("*".getBytes()); 

     Iterator<byte[]> it = keys.iterator(); 

     while(it.hasNext()){ 

      byte[] data = (byte[])it.next(); 
      sb.append(new String(data, 0, data.length)); 
       } 

     return sb; 
    }