RObject.isExists () проверяет память или сервер? - PullRequest
0 голосов
/ 27 апреля 2020

Код ниже выдает исключение NullPointerException только один раз.

    public Optional<Object> getBucketObject(String key) {
        return getKey(key, client::getBucket, RBucket::get);
    }

    public Optional<Long> getLong(String key) {
        return getKey(key, client::getAtomicLong, RAtomicLong::get);
    }

    public Optional<Double> getDouble(String key) {
        return getKey(key, client::getAtomicDouble, RAtomicDouble::get);
    }


public <T, K extends RObject> Optional<T> getKey(String key, Function<String, K> getMethod, Function<K, T> returnMethod) {
        K cachedObj = getMethod.apply(key);

        return
            cachedObj.isExists()
                ? Optional.of(returnMethod.apply(cachedObj)) (***line 50)
                : Optional.empty();
    }

Это трассировка стека:

java.util.Objects.requireNonNull (Objects.java:203)
java.util.Optional.<init> (Optional.java:96)
java.util.Optional.of (Optional.java:108)
xxx.xxx.getKey (xxx.java:50)

Мне было интересно, как это возможно. Единственная найденная мною возможность заключается в том, что между isExists () и apply () ключ был удален на сервере. Но это будет иметь смысл, только если метод isExists () проверит на сервере, а не проверит в ОЗУ.

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

https://javadoc.io/doc/org.redisson/redisson/3.3.2/org/redisson/api/RObject.html#isExists -

1 Ответ

0 голосов
/ 09 мая 2020

Согласно Redis список отображения команд RObject.isExists() ограничен EXISTS Команда Redis

...