2014-11-20 8 views
2

Я хочу проверить, что все мои ключи в redis верны.Повторить итерацию по группам

Я хранение ключей в группах, как так:

userid:fname 
userid:lname 
userid:age 
... 

Я хотел бы перебрать их, группируя их по идентификатору пользователя, а затем проверить каждую группу из Fname, LName и возраста.

Как это сделать?

+0

команды SCAN, вероятно, что вам нужно –

+0

Можете ли вы джайв мне пример о том, как это сделать? Я использую Jedis на Java. –

+0

Несомненно, вы можете найти документацию и документацию для команды redis для jedis? –

ответ

12
ScanParams params = new ScanParams(); 
params.match("userid:fname*"); 

// Use "0" to do a full iteration of the collection. 
ScanResult<String> scanResult = jedis.scan("0", params); 
List<String> keys = scanResult.getResult(); 

Повторите выше код для фамилии и возраста. Или, сопоставьте user:id, а затем отфильтруйте группы с помощью регулярного выражения и итерации через keys.

EDIT: для больших коллекций (миллионы ключей), a scan result will return a few tens of elements. Настройте свой код соответственно продолжить сканирование, пока вся коллекция ключей не было проверено:

ScanParams params = new ScanParams(); 
params.match("userid:fname*"); 

// An iteration starts at "0": http://redis.io/commands/scan 
ScanResult<String> scanResult = jedis.scan("0", params); 
List<String> keys = scanResult.getResult(); 
String nextCursor = scanResult.getStringCursor(); 
int counter = 0; 

while (true) { 
    for (String key : keys) { 
     addKeyToProperGroup(key); 
    } 

    // An iteration also ends at "0" 
    if (nextCursor.equals("0")) { 
     break; 
    } 

    scanResult = jedis.scan(nextCursor, params); 
    nextCursor = scanResult.getStringCursor(); 
    keys = scanResult.getResult(); 
} 
Смежные вопросы