RedisCacheUtils.java 2.03 KB
package com.yoho.search.common.utils;

import java.util.concurrent.TimeUnit;

import org.apache.commons.lang3.StringUtils;

import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.serializer.SerializerFeature;
import com.yoho.core.redis.YHRedisTemplate;
import com.yoho.core.redis.YHValueOperations;

public class RedisCacheUtils {

	public static <T> T get(YHValueOperations<String, String> valueOperations, String key, Class<T> clazz) {
		String compressedVal = valueOperations.get(key);
		if (StringUtils.isBlank(compressedVal)) {
			return null;
		}
		String uncompressStr = SnappyUtils.uncompress(compressedVal);
		return unserializeFromString(uncompressStr, clazz);
	}

	public static <T> void add(YHValueOperations<String, String> valueOperations, String key, T t, int expiredTimeInMinute) {
		String uncompressStr = serializeToString(t);
		String compressedVal = SnappyUtils.compress(uncompressStr);
		if (StringUtils.isBlank(compressedVal)) {
			return;
		}
		valueOperations.set(key, compressedVal, expiredTimeInMinute, TimeUnit.MINUTES);
	}
	
	
	public static <T> String addAndReturnCompresse(YHValueOperations<String, String> valueOperations, String key, T t, int expiredTimeInMinute) {
		String uncompressStr = serializeToString(t);
		String compressedVal = SnappyUtils.compress(uncompressStr);
		if (StringUtils.isBlank(compressedVal)) {
			return null;
		}
		valueOperations.set(key, compressedVal, expiredTimeInMinute, TimeUnit.MINUTES);
		return compressedVal;
	}

	public static void delete(YHRedisTemplate<String, String> redisTemplate, String key) {
		redisTemplate.delete(key);
	}

	public static boolean exist(YHRedisTemplate<String, String> redisTemplate, String key) {
		return redisTemplate.hasKey(key);
	}

	/**
	 * 序列化保持null值
	 * 
	 * @param t
	 * @return
	 */
	private static <T> String serializeToString(T t) {
		return JSON.toJSONString(t, SerializerFeature.WriteMapNullValue);
	}

	private static <T> T unserializeFromString(String cacheObjectValue, Class<T> clazz) {
		return JSON.parseObject(cacheObjectValue, clazz);
	}

}