spymemcached:在获取对象之前检查连接

时间:2016-03-15 16:53:51

标签: spymemcached

我不确定使用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并从mc获取东西?

我在伪代码中想到这样的事情:

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

}

虽然我不知道将connectionStatus与...进行比较,但我似乎找不到这样的例子以及这种比较是否真的有必要?

在我的场景中,我使用spymemcached来存储令牌和用户ID。每次将请求发送到服务器时,服务器首先从mc检索它,如果它不存在,它将从我的数据库中检索它。实际上,spymemcached每秒会被攻击数百次,我不知道每次进行api调用时是否需要检查connectionsStatus。

1 个答案:

答案 0 :(得分:0)

当您在纯缓存方案中使用memcached时,如果连接出现问题,您可能希望快速失败。 我建议您无需检查连接状态,但需要为操作设置严格的超时限制,例如:

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

或设置ConnectionFactory的OpTimeout:

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

在经过一段时间后捕获异常并访问您的数据库。