Как обновить время жизни записи с помощью клиента Redisson в Java?

#java #redis #redisson

#java #redis #redisson

Вопрос:

Допустим, я хотел бы сохранить объект A в Redis, используя RMapCacheReactive и Redisson .
Вначале я поместил его в карту с TTL 10 000 мс по ключу B . Сразу после этого я помещаю тот же объект A с тем же ключом B , но с нулевым TTL.
Согласно документации, метод put «сохраняет значение, сопоставленное с ключом, с указанным временем жизни», поэтому я ожидал, что A оно будет сохранено на этой карте постоянно.
Однако он был фактически удален после того, как прошло 10 000 мс (получить его с помощью клиента Redisson стало невозможно). Есть ли что-то, что я ошибся?

Я проверил это поведение в версиях 3.13.4 и 3.12.5 Redisson.

Комментарии:

1. вы пытались установить TTL как -1?

2. У RMapCacheReactive нет такого метода. И даже если это так, не следует ли автоматически изменять TTL после того, как я добавлю новое значение тем же ключом с новым TTL?

3. Это то, что я говорю, что использование ttl = 0, вероятно, не сработало, поскольку оно не обновило ключ ttl = 0 означает, что у этого ключа нет времени жизни, -1 означает бесконечный.

4. Согласно документации, 0 означает бесконечность («@param ttl — время жизни для ввода ключа значения. Если 0, то сохраняется бесконечно. «). Если я попытаюсь использовать -1 вместо нуля, я получу исключение «, вызванное: java.lang. Исключение IllegalArgumentException: ttl не может быть отрицательным »

Ответ №1:

Я сообщил об этой проблеме на GitHub https://github.com/redisson/redisson/issues/3078 . Оказалось, что это ошибка, которая должна быть исправлена в следующей версии (3.13.5).