/** * Copyright (c) 2005-2010 springside.org.cn * * Licensed under the Apache License, Version 2.0 (the "License"); * * $Id: SpyTokyotyrantClient.java 1211 2010-09-10 16:20:45Z calvinxiu $ */ package org.springside.modules.tokyotyrant; import java.util.Arrays; import java.util.Collection; import java.util.Map; import java.util.concurrent.Future; import net.spy.memcached.MemcachedClient; import org.slf4j.Logger; import org.slf4j.LoggerFactory; /** * SpyMemcached Client针对Tokyotyrant的二次封装,提供常用的Get/GetBulk/Set/Delete/Incr/Decr函数的封装,屏蔽TT不支持的功能. * * 未提供封装的函数可直接调用getClient()取出Spy的原版MemcachedClient来使用. * * @author calvin */ public class SpyTokyotyrantClient { private static Logger logger = LoggerFactory.getLogger(SpyTokyotyrantClient.class); private MemcachedClient client; public SpyTokyotyrantClient(MemcachedClient client) { this.client = client; } public MemcachedClient getMemcachedClient() { return client; } /** * Get方法, 转换结果类型并屏蔽异常,仅返回Null. */ @SuppressWarnings("unchecked") public <T> T get(String key) { try { return (T) client.get(key); } catch (RuntimeException e) { logger.warn("Get from memcached server fail,key is" + key, e); return null; } } /** * GetBulk方法, 转换结果类型并屏蔽异常. */ @SuppressWarnings("unchecked") public <T> Map<String, T> getBulk(String... keys) { try { return (Map<String, T>) client.getBulk(keys); } catch (RuntimeException e) { logger.warn("Get from memcached server fail,keys are" + Arrays.toString(keys), e); return null; } } /** * GetBulk方法, 转换结果类型并屏蔽异常. */ @SuppressWarnings("unchecked") public <T> Map<String, T> getBulk(Collection<String> keys) { try { return (Map<String, T>) client.getBulk(keys); } catch (RuntimeException e) { logger.warn("Get from memcached server fail,keys are" + keys, e); return null; } } /** * Set方法. */ public Future<Boolean> set(String key, Object value) { return client.set(key, 0, value); } /** * Delete方法. */ public Future<Boolean> delete(String key) { return client.delete(key); } /** * Incr方法. */ public long incr(String key, int by, long defaultValue) { return client.incr(key, by, defaultValue); } /** * 异步Incr方法, 不支持默认值, 若key不存在返回-1. */ public Future<Long> asyncIncr(String key, int by) { return client.asyncIncr(key, by); } /** * Decr方法. */ public long decr(String key, int by, long defaultValue) { return client.decr(key, by, defaultValue); } /** * 异步Decr方法, 不支持默认值, 若key不存在返回-1. */ public Future<Long> asyncDecr(String key, int by) { return client.asyncDecr(key, by); } }