ge com.walmart.cirular.interfaces.application;
import java.util.concurrent.TimeUnit;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.stereotype.Component;
import com.ws.commons.cache.ICache;
/**
* redis 缓存实现类
*
* @author 尘无尘
*
*/
@Component
public class RedisICacheImpl implements ICache {
@Autowired(required = false)
private RedisTemplate<String, Object> redisTemplate;
@Override
public void put(String key, Object value) {
redisTemplate.opsForValue().set(key, value);
}
@Override
public void put(String key, Object value, int timeOutSecond) {
redisTemplate.opsForValue().set(key, value, (long) timeOutSecond, TimeUnit.SECONDS);
}
@SuppressWarnings("unchecked")
@Override
public <T> T get(String key) {
T t = (T) redisTemplate.opsForValue().get(key);
redisTemplate.delete(key);
return t;
}
@Override
public void remove(String key) {
redisTemplate.delete(key);
}
@SuppressWarnings("unchecked")
@Override
public <T> T removeAndGet(String key) {
Object obj = get(key);
redisTemplate.delete(key);
return (T) obj;
}
@Override
public void rightPush(String key, Object value, int timeOutSecond) {
redisTemplate.opsForList().rightPush(key, value);
redisTemplate.expire(key, timeOutSecond, TimeUnit.SECONDS);
}
@SuppressWarnings("unchecked")
@Override
public <T> T rightPop(String key) {
return (T) redisTemplate.opsForList().rightPop(key);
}
@SuppressWarnings("unchecked")
@Override
public <T> T leftPop(String key) {
return (T) redisTemplate.opsForList().leftPop(key);
}
@Override
public void leftPush(String key, Object value) {
redisTemplate.opsForList().leftPush(key, value);
}
@Override
public void rightPush(String key, Object value) {
redisTemplate.opsForList().rightPush(key, value);
}
@Override
public void expire(String key, int timeOutSecond) {
redisTemplate.expire(key, timeOutSecond, TimeUnit.SECONDS);
}
@Override
public boolean hasKey(String key) {
return redisTemplate.hasKey(key);
}
@Override
public boolean putIfAbsent(String key, Object value) {
return redisTemplate.opsForValue().setIfAbsent(key, value);
}
@Override
public boolean putIfAbsent(String key, Object value, int timeOutSecond) {
boolean flag = putIfAbsent(key, value);
if (flag) {
expire(key, timeOutSecond);
}
return flag;
}
}
|