package com.qxueyou.scc.base.handler; import java.util.Calendar; import java.util.Date; import java.util.HashMap; import java.util.Map; import org.springframework.stereotype.Repository; import com.alibaba.fastjson.JSON; import com.alibaba.fastjson.JSONObject; import com.qxueyou.scc.base.dao.CommonRedisTemplate; import redis.clients.jedis.ShardedJedis; @Repository(value="qCacheRedis") public class QCacheRedis extends CommonRedisTemplate{ private static String BUCKET_HEADER_KEY="bucketHeaderKey"; @SuppressWarnings("unchecked") public T annocacheHget(String bucket,String cachekey, Class cls) { ShardedJedis client = null; T result = null; try { client = this.getJedisClient(); byte [] arrBytes = client.hget(bucket.getBytes(), cachekey.getBytes()); String strJson =null; Object obj = null; if(arrBytes!=null){ strJson = new String(arrBytes); obj = JSON.parse(strJson); } // Object obj = ReisUtils.unserialize(client.hget(bucket.getBytes(), cachekey.getBytes())); if(obj!=null){ Map valueMap =(Map)obj; //判断是否过期 if(checkIsExpire((Long)valueMap.get("expireTime"))){ //删除键 client.hdel(bucket.getBytes(), cachekey.getBytes()); result = null; }else{ result = JSONObject.toJavaObject((JSON)valueMap.get("target"), cls); } } } finally { this.closeJedisClient(client); } return result; } public Long annocacheHset(String bucket, String cachekey, Object value,int timeout) { ShardedJedis client = null; try { client = this.getJedisClient(); if(!client.exists(bucket.getBytes())){ client.hsetnx(bucket.getBytes(), BUCKET_HEADER_KEY.getBytes(), "".getBytes()); } Map valueMap = new HashMap(); if(timeout>=0){ valueMap.put("expireTime", Calendar.getInstance().getTime().getTime() + timeout * 1000); }else{ valueMap.put("expireTime", -1L); } valueMap.put("target",value); String strJsonString = JSON.toJSONString(valueMap); return client.hset(bucket.getBytes(), cachekey.getBytes(), strJsonString.getBytes()); }finally { this.closeJedisClient(client); } } /** 校验是否过期 */ private boolean checkIsExpire(long expireTime){ //负数表示永不过期 if(expireTime>0){ return new Date(expireTime).compareTo(Calendar.getInstance().getTime())==-1; }else{ return false; } } }