package cc.zenking.edu.info.utils; import javax.annotation.PostConstruct; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.core.env.Environment; import org.springframework.stereotype.Component; import lombok.extern.slf4j.Slf4j; import redis.clients.jedis.Jedis; import redis.clients.jedis.JedisPool; import redis.clients.jedis.JedisPoolConfig; @Component @Slf4j public class RedisUtils { @Autowired private Environment env; public static String ADDR; // Redis服务器IP /*@Value("${redis.server}") public void setStatic(String redisServer) { RedisUtils.ADDR = redisServer; }*/ // Redis的端口号 private static int PORT; // 可用连接实例的最大数目,默认值为8; // 如果赋值为-1,则表示不限制;如果pool已经分配了maxActive个jedis实例,则此时pool的状态为exhausted(耗尽)。 private static int MAX_ACTIVE = 1024; // 控制一个pool最多有多少个状态为idle(空闲的)的jedis实例,默认值也是8。 private static int MAX_IDLE = 200; // 等待可用连接的最大时间,单位毫秒,默认值为-1,表示永不超时。如果超过等待时间,则直接抛出JedisConnectionException; private static int MAX_WAIT = 10000; // 在borrow一个jedis实例时,是否提前进行validate操作;如果为true,则得到的jedis实例均是可用的; private static boolean TEST_ON_BORROW = true; private static JedisPool jedisPool = null; /** * 初始化Redis连接池 */ @PostConstruct public void init() { RedisUtils.ADDR = env.getProperty("redis.server.url"); RedisUtils.PORT = Integer.parseInt(env.getProperty("redis.server.port")); log.info("==ADDR=="+ADDR); log.info("==PORT=="+PORT); try { JedisPoolConfig config = new JedisPoolConfig(); config.setMaxTotal(MAX_ACTIVE); config.setMaxIdle(MAX_IDLE); config.setMaxWaitMillis(MAX_WAIT); config.setTestOnBorrow(TEST_ON_BORROW); jedisPool = new JedisPool(config, ADDR, PORT); } catch (Exception e) { e.printStackTrace(); } } /** * 获取Jedis实例 * * @return */ public synchronized static Jedis getJedis() { try { if (jedisPool != null) { Jedis resource = jedisPool.getResource(); return resource; } else { return null; } } catch (Exception e) { e.printStackTrace(); return null; } } /** * 释放jedis资源 * * @param jedis */ public static void returnResource(final Jedis jedis) { if (jedis != null) { jedisPool.returnResourceObject(jedis); } } }
package cc.zenking.edu.info.utils; import java.util.List; import java.util.Set; import org.springframework.stereotype.Component; import redis.clients.jedis.Jedis; /** * @author chanjing * */ @Component("redisClient") public class RedisClinet { /** * 存储一周 */ long SESSION_CACHE_TIME = 336 * 60 * 1000; static { } /** * 通过key删除(字节) * * @param key */ public void del(byte[] key) { Jedis jedis = RedisUtils.getJedis(); jedis.del(key); RedisUtils.returnResource(jedis); } /** * 通过key删除 * * @param key */ public void del(String key) { Jedis jedis = RedisUtils.getJedis(); jedis.del(key); RedisUtils.returnResource(jedis); } /** * 添加key value 并且设置存活时间(byte) * * @param key * @param value * @param liveTime */ public void set(byte[] key, byte[] value, int liveTime) { Jedis jedis = RedisUtils.getJedis(); jedis.set(key, value); jedis.expire(key, liveTime); RedisUtils.returnResource(jedis); } /** * 添加key value 并且设置存活时间 * * @param key * @param value * @param liveTime */ public void set(String key, String value, int liveTime) { Jedis jedis = RedisUtils.getJedis(); jedis.set(key, value); jedis.expire(key, liveTime); RedisUtils.returnResource(jedis); } /** * 添加key value * * @param key * @param value */ public void set(String key, String value) { Jedis jedis = RedisUtils.getJedis(); jedis.set(key, value); RedisUtils.returnResource(jedis); } /** * 添加key value (字节)(序列化) * * @param key * @param value */ public void set(String key, Object value) { Jedis jedis = RedisUtils.getJedis(); jedis.set(key.getBytes(), SerializeUtil.serialize(value)); jedis.pexpire(key, SESSION_CACHE_TIME); RedisUtils.returnResource(jedis); } /** * 获取redis value (String) * * @param key * @return */ public String get(String key) { Jedis jedis = RedisUtils.getJedis(); String value = jedis.get(key); RedisUtils.returnResource(jedis); return value; } /** * 获取redis value (byte [] )(反序列化) * * @param key * @return */ public Object get(byte[] key) { Jedis jedis = RedisUtils.getJedis(); Object value = SerializeUtil.unserialize(jedis.get(key)); RedisUtils.returnResource(jedis); return value; } /** * 通过正则匹配keys * * @param pattern * @return */ public Set<String> keys(String pattern) { Jedis jedis = RedisUtils.getJedis(); Set<String> value = jedis.keys(pattern); RedisUtils.returnResource(jedis); return value; } /** * 检查key是否已经存在 * * @param key * @return */ public boolean exists(String key) { Jedis jedis = RedisUtils.getJedis(); boolean value = jedis.exists(key); RedisUtils.returnResource(jedis); return value; } /******************* redis list操作 ************************/ /** * 往list中添加元素 * * @param key * @param value */ public void lpush(String key, String value) { Jedis jedis = RedisUtils.getJedis(); jedis.lpush(key, value); RedisUtils.returnResource(jedis); } public void rpush(String key, String value) { Jedis jedis = RedisUtils.getJedis(); jedis.rpush(key, value); RedisUtils.returnResource(jedis); } /** * 数组长度 * * @param key * @return */ public Long llen(String key) { Jedis jedis = RedisUtils.getJedis(); Long len = jedis.llen(key); RedisUtils.returnResource(jedis); return len; } /** * 获取下标为index的value * * @param key * @param index * @return */ public String lindex(String key, Long index) { Jedis jedis = RedisUtils.getJedis(); String str = jedis.lindex(key, index); RedisUtils.returnResource(jedis); return str; } public String lpop(String key) { Jedis jedis = RedisUtils.getJedis(); String str = jedis.lpop(key); RedisUtils.returnResource(jedis); return str; } public List<String> lrange(String key, long start, long end) { Jedis jedis = RedisUtils.getJedis(); List<String> str = jedis.lrange(key, start, end); RedisUtils.returnResource(jedis); return str; } /********************* redis list操作结束 **************************/ /** * 清空redis 所有数据 * * @return */ public String flushDB() { Jedis jedis = RedisUtils.getJedis(); String str = jedis.flushDB(); RedisUtils.returnResource(jedis); return str; } /** * 查看redis里有多少数据 */ public long dbSize() { Jedis jedis = RedisUtils.getJedis(); long len = jedis.dbSize(); RedisUtils.returnResource(jedis); return len; } /** * 检查是否连接成功 * * @return */ public String ping() { Jedis jedis = RedisUtils.getJedis(); String str = jedis.ping(); RedisUtils.returnResource(jedis); return str; } }
package cc.zenking.edu.info.utils; import java.io.ByteArrayInputStream; import java.io.ByteArrayOutputStream; import java.io.ObjectInputStream; import java.io.ObjectOutputStream; public class SerializeUtil { public static byte[] serialize(Object object) { ObjectOutputStream oos = null; ByteArrayOutputStream baos = null; try { // 序列化 baos = new ByteArrayOutputStream(); oos = new ObjectOutputStream(baos); oos.writeObject(object); byte[] bytes = baos.toByteArray(); return bytes; } catch (Exception e) { } return null; } public static Object unserialize( byte[] bytes) { ByteArrayInputStream bais = null; try { // 反序列化 bais = new ByteArrayInputStream(bytes); ObjectInputStream ois = new ObjectInputStream(bais); return ois.readObject(); } catch (Exception e) { } return null; } }