Redisson getAtomicLong - что произойдет, если ключ не существует?

Я создаю реализацию кеша на Java с помощью Redisson. Я хочу использовать его для кеширования числового значения. Итак, я использую getAtomicLong () вот так:

      RAtomicLong userNumber = redissonClient.getAtomicLong("my-key");
long value = userNumber.get();

Однако документы не очень описывают, что здесь происходит, поэтому у меня есть несколько вопросов:

  1. Предположим, что «мой ключ» еще не существует в кеше. Что возвращает getAtomicLong ()?
  2. Если «мой-ключ» не существует, что возвращает userNumber.get()?

1 ответ

Я написал глупый пример программы на Java и провел несколько экспериментов, поэтому позвольте мне ответить на вопрос, который вы действительно задали, и на вопрос, который, как я думаю, вы пытались задать .

Предположим, что «мой ключ» еще не существует в кэше. Что возвращает getAtomicLong()?

Экземпляр - потому что вы можете что-то сделать с ключом/значением в будущем (например, или что-то).

Если «мой ключ» не существует, что возвращает userNumber.get()?

Нуль. Да, не , да не исключение, просто 0. Это было довольно удивительно в моей тестовой программе.

Действительно интересная часть Reddison API заключается в том, что он сильно опирается на атомарный материал — отлично, если вы можете обновлять значение из нескольких потоков — но, похоже, не документирует самый простой вариант использования: я хочу читать или писать из Redis, и это не число / не атомарно / мои потоки или данные структурированы таким образом, что они не будут забивать друг друга.

Кажется, это то, что Реддисон вещи для.

Это вернет _ если объект не в 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 ).

Другие вопросы по тегам