spymemcached: проверка соединения перед получением объекта

Я не уверен, что лучше всего использовать usign spymemcached, но я вижу много руководств в Интернете, которые делают это:

  mc = new MemcachedClient(
            new ConnectionFactoryBuilder()
                  .setProtocol(ConnectionFactoryBuilder.Protocol.BINARY)
                    .setAuthDescriptor(ad).build(),
            AddrUtil.getAddresses("XXX"));

mc.set("1", 0, "Hello");
mc.get("1");

Я подумал, что нужно сначала проверить, действительно ли mc подключен, прежде чем устанавливать и получать вещи от mc?

Я думал что-то вроде этого в псевдокоде:

    if (mc.getConnection().connectionsStatus().equals("I'm connected!")) {
//do the sets and gets inside the if statement

}

Хотя я не знаю, с чем сравнить connectionStatus... Я не мог найти пример этого и действительно ли это сравнение необходимо?

В моем сценарии я использую spymemcached для хранения токенов и идентификаторов пользователей. Каждый раз, когда запрос отправляется на сервер, сервер сначала извлекает его из mc, а если его там нет, он извлекает его из моей базы данных. По сути, spymemcached будет срабатывать сотни раз в секунду, и я не знаю, нужна ли проверка connectionStatus каждый раз, когда выполняется вызов API.


person Simon    schedule 15.03.2016    source источник


Ответы (1)


Поскольку вы используете memcached в сценарии с чистым кешем, вы можете захотеть получить быстрый отказ, если с соединением что-то не так. Я предлагаю вам не проверять состояние подключения, а установить строгий лимит времени ожидания для ваших операций, например:

        GetFuture<Object> future = mc.asyncGet("1");
        Object result = future.get(20, TimeUnit.MILLISECONDS);

или установите OpTimeout для ConnectionFactory:

  mc = new MemcachedClient(
            new ConnectionFactoryBuilder()
                  .setProtocol(ConnectionFactoryBuilder.Protocol.BINARY)
                    .setOpTimeout(10) // the unit is milliseconds
                    .setAuthDescriptor(ad).build(),
            AddrUtil.getAddresses("XXX"));

поймать исключение по истечении времени и получить доступ к вашей базе данных.

person sel-fish    schedule 09.06.2016