目录
使用redis已经是十分普遍的事情了
以上是自己编写的jar的目录
我们使用spring-data-redis-jpa 的 依赖
利用 fastJson对任意对象进行 StringJson化,同时还设置过期时间
@Component
public class RedisClientKValueImpl<V> implements IRedisClientKValue<V> {
@Autowired
private StringRedisTemplate redisTemplate;
protected Class<V> vClass;
public RedisClientKValueImpl() {
}
/**
* 为指定的key设定指定的value
*
* @param appkey 应用模块的固定key部分(必要)
* @param key 对象key(必要)
* @param value 对象值(必要)
* @see com.baozun.unex.common.redis.client.IRedisClientKValue#set(java.lang.String, java.lang.String, java.lang.Object)
*/
@Override
public void set(String appkey, String key, V value) {
redisTemplate.opsForValue().set(combineKey(appkey, key), this.serialize(value));
}
/**
* 为指定的key设定指定的value和超时时间
*
* @param appkey 应用模块的固定key部分(必要)
* @param key 对象key(必要)
* @param value 对象值(必要)
* @param timeout 超时时间(单位毫秒)
* @see com.baozun.unex.common.redis.client.IRedisClientKValue#set(java.lang.String, java.lang.String, java.lang.Object, long)
*/
@Override
public void set(String appkey, String key, V value, long timeout) {
redisTemplate.opsForValue().set(combineKey(appkey, key), this.serialize(value), timeout, TimeUnit.MILLISECONDS);
}
/**
* 删除指定的key/value
*
* @param appkey 应用模块的固定key部分(必要)
* @param key 对象key(必要)
* @see com.baozun.unex.common.redis.client.IRedisClientKValue#delete(java.lang.String, java.lang.String)
*/
@Override
public void delete(String appkey, String key) {
redisTemplate.delete(combineKey(appkey, key));
}
/**
* 批量为指定的key设定指定的value
*
* @param appkey 应用模块的固定key部分(必要)
* @param map 需要设定的值(必要)
* @see com.baozun.unex.common.redis.client.IRedisClientKValue#multiSet(java.lang.String, java.util.Map)
*/
@Override
public void multiSet(String appkey, Map<String, ? extends V> map) {
Map<String, String> newMap = new HashMap<String, String>();
for (String key : map.keySet()) {
newMap.put(combineKey(appkey, key), this.serialize(map.get(key)));
}
redisTemplate.opsForValue().multiSet(newMap);
}
/**
* 获取指定的key的value
*
* @param appkey 应用模块的固定key部分(必要)
* @param key 对象key(必要)
* @param value
* @see com.baozun.unex.common.redis.client.IRedisClientKValue#get(java.lang.String, java.lang.String)
*/
@Override
public V get(String appkey, String key, Class<? extends V> requireClass) {
return this.deserialize(redisTemplate.opsForValue().get(combineKey(appkey, key)), requireClass);
}
/**
* 为指定的Key的数值递增相应的delta, 原值必须为Long型
*
* @param appkey 应用模块的固定key部分(必要)
* @param key 对象key(必要)
* @param delta 递增的值
* @see com.baozun.unex.common.redis.client.IRedisClientKValue#increment(java.lang.String, java.lang.String, long)
*/
@Override
public Long increment(String appkey, String key, long delta) {
return redisTemplate.opsForValue().increment(combineKey(appkey, key), delta);
}
/**
* 设定指定的键值的过期时长
*
* @param appkey 应用模块的固定key部分(必要)
* @param key 对象key(必要)
* @param timeout 超时时长(单位:秒)
* @return 设置成功返回true, 否则false
* @author zejun.dong
* @Date 2017年11月15日上午10:44:16
*/
@Override
public Boolean expire(String appkey, String key, final long timeout) {
return redisTemplate.expire(combineKey(appkey, key), timeout, TimeUnit.SECONDS);
}
/**
* 设定指定的键值的过期时长
*
* @param appkey 应用模块的固定key部分(必要)
* @param key 对象key(必要)
* @param date 超时时间
* @return 设置成功返回true, 否则false
* @author zejun.dong
* @Date 2017年11月15日上午10:44:16
*/
@Override
public Boolean expireAt(String appkey, String key, final Date date) {
return redisTemplate.expireAt(combineKey(appkey, key), date);
}
/*
* 获取当前的组合key
*/
private String combineKey(String appkey, String key) {
return String.format("%s-%s", appkey, key);
}
private String serialize(V value) {
return JSON.toJSONString(value);
}
private V deserialize(String value, Class<? extends V> requireClass) {
return JSON.parseObject(value, requireClass);
}
}