package com.taobao.metamorphosis.example.cache; import java.util.concurrent.TimeoutException; import net.rubyeye.xmemcached.MemcachedClient; import net.rubyeye.xmemcached.exception.MemcachedException; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; import com.taobao.metamorphosis.client.consumer.MessageIdCache; public class MemcachedMessageIdCache implements MessageIdCache { private final MemcachedClient memcachedClient; private int expireInSeconds = 60; private static final Log log = LogFactory.getLog(MemcachedMessageIdCache.class); public MemcachedMessageIdCache(MemcachedClient client) { this.memcachedClient = client; } public void setExpireInSeconds(int expireInSeconds) { this.expireInSeconds = expireInSeconds; } public int getExpireInSeconds() { return this.expireInSeconds; } @Override public void put(String key, Byte exists) { try { this.memcachedClient.set(key, this.expireInSeconds, exists); } catch (MemcachedException e) { log.error("Added message id cache failed", e); } catch (InterruptedException e) { Thread.currentThread().interrupt(); } catch (TimeoutException e) { log.error("Added message id cache timeout", e); } } @Override public Byte get(String key) { try { return this.memcachedClient.get(key); } catch (MemcachedException e) { log.error("Get item from message id cache failed", e); } catch (InterruptedException e) { Thread.currentThread().interrupt(); } catch (TimeoutException e) { log.error("Get item from message id cache timeout", e); } return null; } }