Redisson getAtomicLong - что произойдет, если ключ не существует?
Я создаю реализацию кеша на Java с помощью Redisson. Я хочу использовать его для кеширования числового значения. Итак, я использую getAtomicLong () вот так:
RAtomicLong userNumber = redissonClient.getAtomicLong("my-key");
long value = userNumber.get();
Однако документы не очень описывают, что здесь происходит, поэтому у меня есть несколько вопросов:
- Предположим, что «мой ключ» еще не существует в кеше. Что возвращает getAtomicLong ()?
- Если «мой-ключ» не существует, что возвращает userNumber.get()?
1 ответ
Я написал глупый пример программы на Java и провел несколько экспериментов, поэтому позвольте мне ответить на вопрос, который вы действительно задали, и на вопрос, который, как я думаю, вы пытались задать .
Предположим, что «мой ключ» еще не существует в кэше. Что возвращает getAtomicLong()?
Экземпляр
Если «мой ключ» не существует, что возвращает userNumber.get()?
Нуль. Да, не , да не исключение, просто 0. Это было довольно удивительно в моей тестовой программе.
Действительно интересная часть Reddison API заключается в том, что он сильно опирается на атомарный материал — отлично, если вы можете обновлять значение из нескольких потоков — но, похоже, не документирует самый простой вариант использования: я хочу читать или писать из Redis, и это не число / не атомарно / мои потоки или данные структурированы таким образом, что они не будут забивать друг друга.
Кажется, это то, что Реддисон
Это вернет _
RBucket<String> back = client.getBucket("foo");
String value = back.get();
if (value == null) {
System.out.println("NOPE, NULL");
} else {
System.out.println(value);
}
Я действительно хотел бы, чтобы это было задокументировано лучше - оглядываясь назад, я вижу «ведро» как контейнер для вещей, но какое-то время я предполагал, что это означает какой-то расширенный шаблон Redis, а не «держатель значения универсального типа».
(Если вам действительно нужны причудливые вещи, об этом есть отличная статья о baeldung ).