Клиент Redisson: извлечение верхних N ключей

#redis #redisson

#redis #redisson

Вопрос:

Как я могу получить верхние из N ключей от клиента redisson?

Я нашел следующую подпись в getKeysByPattern() методе:

 Iterable<String> getKeysByPattern(String pattern, int count);
  

Но похоже, что count — is ключи загружаются по запросу в Redis.

Как я могу загрузить N верхних ключей из Redis через клиент redisson?

Ответ №1:

getKeysByPattern() недопустимо для такого случая, верно.

Здесь лучше использовать скрипты lua:

 val luaScript = "return {redis.call('SCAN',ARGV[1],'MATCH',ARGV[2],'COUNT',ARGV[3])}"
var cursor = 0
do {
  val data = redissonClient
                .getScript(StringCodec.INSTANCE)
                .eval(RScript.Mode.READ_ONLY,
                        luaScript,
                        RScript.ReturnType.MAPVALUELIST,
                        listOf(),
                        cursor,
                        "some-pattern",
                        batchSize)


  val redistListData = (data[0][1] as List<String>)
  cursor = data[0][0].toInt()
} while (cursor != 0)
  

Ответ №2:

Для этого случая необходимо использовать RKeys.getKeysWithLimit(String pattern, int limit) метод.