MemcacheClient 封装

原创 2016年06月01日 14:56:04
package org.digdata.swustoj.base;

import java.util.List;
import java.util.Map;
import java.util.concurrent.TimeUnit;

public interface IMemCacheTemplate {

    public static final String JSON_KEY = "json";
    public static final String JSON_TYPE_KEY = "type";

    public static final Integer STRING_TYPE = 1;
    public static final Integer LIST_TYPE = 2;
    public static final Integer OBJECT_TYPE = 3;

    public static final TimeUnit SECOND_TIME_UNIT = TimeUnit.SECONDS;
    public static final TimeUnit MINUTE_TIME_UNIT = TimeUnit.MINUTES;
    public static final TimeUnit HOURS_TIME_UNIT = TimeUnit.HOURS;
    public static final TimeUnit DAYS_TIME_UNIT = TimeUnit.DAYS;

    // 默认5分钟
    public static final Integer DEFAULT_EXPIRE_TIME = 30 * 60 * 60;

    /**
     * 
     * @author wwhhf
     * @since 2016年6月1日
     * @comment 获取对象
     * @param key
     * @param clazz
     * @return
     */
    public Object getObject(String key, Class<?> clazz);

    public List<?> getList(String key, Class<?> clazz);

    public String getString(String key);

    public Map<String, String> getString(String... keys);

    /**
     * 
     * @author wwhhf
     * @since 2016年6月1日
     * @comment 设置对象
     * @param key
     * @param obj
     * @return
     */
    public IMemCacheTemplate set(String key, Object obj);

    public IMemCacheTemplate set(String key, Object obj, TimeUnit timeUnit,
            Integer time);

    /**
     * 
     * @author wwhhf
     * @since 2016年6月1日
     * @comment 清除对象
     * @return
     */
    public IMemCacheTemplate clear();

    public IMemCacheTemplate delete(String key);

    /**
     * 
     * @author wwhhf
     * @since 2016年6月1日
     * @comment 运算符
     * @param key
     * @return
     */
    public IMemCacheTemplate incr(String key);

    public IMemCacheTemplate decr(String key);

}
package org.digdata.swustoj.base;

import java.util.Date;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.concurrent.TimeUnit;

import org.digdata.swustoj.exception.BusinessException;
import org.digdata.swustoj.util.JsonUtil;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Repository;

import com.danga.MemCached.MemCachedClient;

/**
 * 
 * @author wwhhf
 * @since 2016年6月1日
 * @comment MemCache 封装工具类
 */
@Repository
public class MemCacheTemplateImpl implements IMemCacheTemplate {

    @Autowired
    private MemCachedClient memCacheClient = null;

    @Override
    public Object getObject(String key, Class<?> clazz) {
        try {
            String value = (String) memCacheClient.get(key);
            return JsonUtil.parseObject(value, clazz);
        } catch (Exception e) {
            throw new BusinessException(e);
        }
    }

    @Override
    public List<?> getList(String key, Class<?> clazz) {
        try {
            String value = (String) memCacheClient.get(key);
            return JsonUtil.parseList(value, clazz);
        } catch (Exception e) {
            throw new BusinessException(e);
        }
    }

    @Override
    public String getString(String key) {
        return (String) memCacheClient.get(key);
    }

    @Override
    public IMemCacheTemplate set(String key, Object obj) {
        return set(key, obj, TimeUnit.MINUTES, DEFAULT_EXPIRE_TIME);
    }

    @Override
    public IMemCacheTemplate clear() {
        memCacheClient.flushAll();
        return this;
    }

    @Override
    public IMemCacheTemplate incr(String key) {
        memCacheClient.incr(key);
        return this;
    }

    @Override
    public IMemCacheTemplate decr(String key) {
        memCacheClient.decr(key);
        return this;
    }

    @Override
    public IMemCacheTemplate delete(String key) {
        memCacheClient.delete(key);
        return this;
    }

    @Override
    public Map<String, String> getString(String... keys) {
        Map<String, String> res = new HashMap<String, String>();
        for (String key : keys) {
            res.put(key, getString((key)));
        }
        return res;
    }

    @Override
    public IMemCacheTemplate set(String key, Object obj, TimeUnit timeUnit,
            Integer time) {
        Map<String, Object> map = object2Json(key, obj);
        Date expDate = null;
        // 当前的毫秒
        if (timeUnit.compareTo(SECOND_TIME_UNIT) == 0) {
            expDate = new Date(time * 1000);
        } else if (timeUnit.compareTo(MINUTE_TIME_UNIT) == 0) {
            expDate = new Date(time * 60 * 1000);
        } else if (timeUnit.compareTo(HOURS_TIME_UNIT) == 0) {
            expDate = new Date(time * 60 * 60 * 1000);
        } else {
            expDate = new Date(time * 60 * 60 * 60 * 1000);
        }
        try {
            this.memCacheClient.set(key, (String) map.get(JSON_KEY), expDate,
                    (Integer) map.get(JSON_TYPE_KEY));
        } catch (Exception e) {
            throw new BusinessException(e);
        }
        return this;
    }

    /**
     * @author wwhhf
     * @since 2016年6月1日
     * @comment
     * @param key
     * @param obj
     * @return
     */
    private Map<String, Object> object2Json(String key, Object obj) {
        Map<String, Object> res = new HashMap<>();
        if (obj.getClass() == String.class) {
            res.put(JSON_KEY, obj);
            res.put(JSON_TYPE_KEY, STRING_TYPE);
        } else if (obj.getClass() == List.class) {
            res.put(JSON_KEY, JsonUtil.getJson(obj, true));
            res.put(JSON_TYPE_KEY, LIST_TYPE);
        } else {
            res.put(JSON_KEY, JsonUtil.getJson(obj, true));
            res.put(JSON_TYPE_KEY, OBJECT_TYPE);
        }
        return res;
    }

}
版权声明:本文为博主原创文章,未经博主允许不得转载。

相关文章推荐

C++ MemCacheClient

  • 2010-03-19 19:18
  • 47KB
  • 下载

不要根据MemcacheClient的delete结果来决定是否删除数据库记录

今天在给同事做CodeReview时,发现了一个问题。代码大致如下: public boolean delete(String key){ boolean isCacheDeleted = ...

memcacheclient-2.0

  • 2013-05-05 10:30
  • 38KB
  • 下载

FFMPEG的.Net封装,FFmpeg.NET

原文地址: http://www.open-open.com/lib/view/open1354088827449.html FFMPEG的.Net封装,FFmpeg.NET 这是FFMPEG库的...
  • Joyhen
  • Joyhen
  • 2015-03-10 11:42
  • 6089

VBA封装助手

  • 2017-10-14 08:45
  • 9.87MB
  • 下载

HDMI封装尺寸

  • 2017-10-13 16:06
  • 677KB
  • 下载

ios中封装网络请求类

ios中封装网络请求类 #import "JSNetWork.h" //asiHttpRequest #import "ASIFormDataRequest.h" //xml 的解析 #import...

Volley封装demo

  • 2017-10-13 11:18
  • 17.91MB
  • 下载

AD SD卡PCB封装

  • 2017-10-12 15:08
  • 234KB
  • 下载
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:深度学习:神经网络中的前向传播和反向传播算法推导
举报原因:
原因补充:

(最多只允许输入30个字)