package com.gxx.record.service.impl;
import net.rubyeye.xmemcached.MemcachedClient;
import org.apache.commons.lang3.StringUtils;
import org.apache.log4j.Logger;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import com.gxx.record.service.MemcachedService;
/**
*
* - Title:
* -
* memcached服务实现类
*
* - Description:
* -
*
none
*
*
*
* @author Administrator
* @version 1.0, 2015年7月23日
* @since record
*
*/
@Service("memcachedService")
public class MemcachedServiceImpl implements MemcachedService {
/**
* 日志处理器
*/
private final Logger logger = Logger.getLogger(MemcachedServiceImpl.class);
private int expires = 3600;//默认过期时间 单位秒 1个小时
@Autowired
private MemcachedClient memcachedClient;
/**
* 仅当存储空间中不存在键相同的数据时才保存
* @param key
* @param value
*/
public void addWithNoReply(String key, T value) {
this.addWithNoReply(key, expires, value);
}
/**
* 设置键值对
* @param key key
* @param expires 单位:秒,0 表示永不过期
* @param value 必须是一个可序列化的对象, 可以是容器类型如:List,但容器里面保存的对象必须是可序列化的
*/
public void addWithNoReply(String key, int expires, T value) {
if (StringUtils.isEmpty(key)) return;
try {
if (memcachedClient != null) {
memcachedClient.addWithNoReply(key, expires, value);
}
} catch(Exception e) {
logger.error(e.getMessage(), e);
}
}
/**
* 无论何时都保存
* @param key
* @param value
*/
public void set(String key, T value) {
this.set(key, expires, value);
}
/**
* 设置键值对
* @param key key
* @param expires 单位:秒,0 表示永不过期
* @param value 必须是一个可序列化的对象, 可以是容器类型如:List,但容器里面保存的对象必须是可序列化的
*/
public void set(String key, int expires, T value) {
if (StringUtils.isEmpty(key)) return;
try {
if (memcachedClient != null) {
memcachedClient.set(key, expires, value);
}
} catch(Exception e) {
logger.error(e.getMessage(), e);
}
}
/**
* 根据key获得值
* @param key key
* @return value
*/
@SuppressWarnings("unchecked")
public T get(String key) {
try {
if (!StringUtils.isEmpty(key) && memcachedClient != null) {
return (T)memcachedClient.get(key);
}
} catch(Exception e) {
logger.error(e.getMessage(), e);
}
return null;
}
}