【第21期】观点:人工智能到底用 GPU?还是用 FPGA?

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;
    }

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

相关文章推荐

Memcached深度分析

Memcached是danga.com(运营LiveJournal的技术团队)开发的一套分布式内存对象缓存系统,用于在动态系统中减少数据库负载,提升性能。关于这个东西,相信很多人都用过,本文意在通过对memcached的实现及代码分析,获得对这个出色的开源软件更深入的了解,并可以根据我们的需要对其进行更进一步的优化。末了将通过对BSM_Memcache扩展的分析,加深对memcached的使用方式理解。 本文的部分内容可能需要比较好的数学基础作为辅助。 ◎Memcached是什么 在阐述这个问题之前,我们首

Memcache的使用

Memcache的内容 Memcache 是一种简单的内存缓存工具,通过将高频率出现的请求结果存储在内存中来减少读取数据库的次数或者较长地逻辑处理任务。最终提高整个应用服务的响应速度。 Memca...

Hystrix 使用与分析

 转载请注明出处哈:http://hot66hot.iteye.com/blog/2155036<

跨平台 C/C++ memcached 客户端 memcacheclient 介绍

1、简介     C/C++ memcached 客户端首推 libmemcached,但是其并不兼容 Windows 下 VC++ 编译器。在 google code 的 memcached ...

Memcached深度分析

Memcached深度分析作者:NP博士原文发表于:http://www.54np.com/Memcached是danga.com(运营LiveJournal的技术团队)开发的一套分布式内存对象缓存系统,用于在动态系统中减少数据库负载,提升性能。关于这个东西,相信很多人都用过,本文意在通过对memcached的实现及代码分析,获得对这个出色的开源软件更深入的了解,并可以根据我们的需要对其进行更进一步的优化。末了将通过对BSM_Me

用Memcached实现Spring Cache

首先可以看看Spring Cache介绍 Spring Cache默认使用了ConcurrentHashMap和Ehcache来实现. 想要转成Memcached, 得自己重写. 实现的方法也很简单,...

Memcached深度分析

Memcached是danga.com(运营LiveJournal的技术团队)开发的一套分布式内存对象缓存系统,用于在动态系统中减少数据库 负载,提升性能。关于这个东西,相信很多人都用过,本文意在通过对memcached的实现及代码分析,获得对这个出色的开源软件更深入的了解,并可以根 据我们的需要对其进行更进一步的优化。末了将通过对BSM_Memcache扩展的分析,加深对memcached的使用方式理解。 本文的部分内容可能需要比较好的数

Hystrix 使用与分析

一:为什么需要Hystrix? 在大中型分布式系统中,通常系统很多依赖(HTTP,hession,Netty,Dubbo等),如下图:   在高并发访问下,这些依赖的稳定性与...

[转]Memcached深度分析

&lt;iframe align="center" marginwidth="0" marginheight="0" src="http://www.zealware.com/csdnblog336280.html" frameborder="0" width="336" scrolling="no" height="280"&gt;&lt;/iframe&gt; //奶瓶同学滴文章,哼哼//来源:http://www.54np.com/do

Memcache Key 设计技巧及注意事项

初始化Memcache Client # perl my $memclient = Cache::Memcached->new({ servers => [ '10.0.0.10:112...
收藏助手
不良信息举报
您举报文章:深度学习:神经网络中的前向传播和反向传播算法推导
举报原因:
原因补充:

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