redis安装看这里:http://www.javashuo.com/article/p-nusrcyje-b.htmljava
须要的jar:commons-pool2 ,redis.clientsredis
①. 进入这里查看操做redis的客户端语言及支持的操做方式: https://redis.io/clients数组
②.我选择的是jedis ,这里对jedis进行了一个小小的封装,通过简单的测试,挺好用的.测试
这里存储对象基本上都是以字节数组保存的,因此写了个序列化和反序列化的utilui
/** * 序列化 * @param t * @return * @throws Exception */ public static <T> byte[] serializable(T t) throws Exception { ByteArrayOutputStream bos = new ByteArrayOutputStream(); ObjectOutputStream oos = new ObjectOutputStream(bos); oos.writeObject(t); byte[] b = bos.toByteArray(); bos.close(); oos.close(); return b; } /** * 反序列化 * @param b * @return * @throws Exception */ @SuppressWarnings("unchecked") public static <T> T unserializable(byte[] b) throws Exception { ByteArrayInputStream bis = new ByteArrayInputStream(b); ObjectInputStream ois = new ObjectInputStream(bis); T t = (T) ois.readObject(); bis.close(); ois.close(); return t; }
③.链接池建立:.net
private static final String CACHE_KEY = "cache-"; private static Jedis jedis; private static JedisPool JEDIS_POOL = null; static { JedisPoolConfig config = new JedisPoolConfig(); config.setMaxIdle(RedisConf.MAX_IDLE); config.setMaxTotal(RedisConf.MAX_TOTAL); config.setMaxWaitMillis(RedisConf.MAX_WAIT); config.setMinIdle(RedisConf.MIN_IDLE); JEDIS_POOL = new JedisPool(config, RedisConf.HOST, RedisConf.PORT, RedisConf.TIMEOUT, RedisConf.AUTH); // 获取jredis实例 getJRedis(); }
④.操做key-value键值对code
public <K extends Serializable, V extends Serializable> void putMap(String key, Map<K, V> map) throws Exception { if (StringUtils.isEmpty(key) || map.size() < 1) { return; } if (jedis == null) getJRedis(); jedis.set((CACHE_KEY + key).getBytes(), SerializableUtil.serializable(map)); // jedis.hmset(key.getBytes(), serializable(map)); } public <K extends Serializable, V extends Serializable> Map<K, V> getMap(String key) throws Exception { if (StringUtils.isEmpty(key)) { throw new NullPointerException("key empty!"); } if (jedis == null) getJRedis(); if (!jedis.exists((CACHE_KEY + key).getBytes())) { return null; } return SerializableUtil.unserializable(jedis.get((CACHE_KEY + key).getBytes())); }Map map = new HashMap(); map.put("age", 12); map.put("name", "tony"); redis.put("map", map); System.out.println(redis.getMap("map")); //测试结果: {age=12, name=tony}
⑤.操做一个对象:对象
/** * 添加一个对象 * * @param key * @param t * @throws Exception */ public <T extends Serializable> void putObject(String key, T t) throws Exception { if (StringUtils.isEmpty(key) || t == null) { return; } if (jedis == null) getJRedis(); jedis.set((CACHE_KEY + key).getBytes(), SerializableUtil.serializable(t)); } /** * 获取对象 * * @param key * @return * @throws Exception */ @Deprecated public <T extends Serializable> T getObject(String key) throws Exception { if (StringUtils.isEmpty(key)) { throw new NullPointerException("key empty!"); } if (jedis == null) getJRedis(); return SerializableUtil.unserializable(jedis.get((CACHE_KEY + key).getBytes())); }redis.putObject("person", new Person(1, "timor", 19L, "male", new Date())); System.out.println(redis.getObject("person")); //测试结果 Person [id=1, name=timor, age=19, gender=male, birthday=Thu Sep 21 16:00:50 CST 2017]⑥.操做一个listblog
/** * 添加一个List集合 * * @param key * @param list * @throws Exception */ @Deprecated public <S extends Serializable> void putList(String key, List<S> list) throws Exception { if (StringUtils.isEmpty(key) || list.size() < 1) { return; } if (jedis == null) getJRedis(); jedis.set((CACHE_KEY + key).getBytes(), SerializableUtil.serializable(list)); } @Deprecated public <S extends Serializable> List<S> getList(String key) throws Exception { if (StringUtils.isEmpty(key)) { throw new NullPointerException("key empty!"); } if (jedis == null) getJRedis(); return SerializableUtil.unserializable(jedis.get((CACHE_KEY + key).getBytes())); }List<String> list = new ArrayList<String>(); list.add("a"); list.add("b"); list.add("c"); redis.putList("my-list", list); System.out.println(redis.getList("my-list")); //测试结果 [a, b, c]⑦.操做set: rem
/** * 添加一个Set集合 * * @param key * @param set * @throws Exception */ @Deprecated public <S extends Serializable> void putSet(String key, Set<S> set) throws Exception { if (StringUtils.isEmpty(key) || set.size() < 1) { return; } if (jedis == null) getJRedis(); jedis.set((CACHE_KEY + key).getBytes(), SerializableUtil.serializable(set)); // for (byte[] b : serializable(set)) { // jedis.sadd(key.getBytes(), b); // } } @Deprecated public <S extends Serializable> Set<S> getSet(String key) throws Exception { if (StringUtils.isEmpty(key)) { throw new NullPointerException("key empty!"); } if (jedis == null) getJRedis(); return SerializableUtil.unserializable(jedis.get((CACHE_KEY + key).getBytes())); }RedisUtil redis = new RedisUtil(); Set<String> set = new HashSet<String>(); set.add("1"); set.add("2"); set.add("3"); redis.putSet("my-set", set); System.out.println(redis.getSet("my-set")); //测试结果 [3, 2, 1]⑧. 上述写的过于麻烦,这里把上述所有废弃再也不使用,下面是完整的代码:
private static final String CACHE_KEY = "cache-"; private static Jedis jedis; private static JedisPool JEDIS_POOL = null; static { JedisPoolConfig config = new JedisPoolConfig(); config.setMaxIdle(RedisConf.MAX_IDLE); config.setMaxTotal(RedisConf.MAX_TOTAL); config.setMaxWaitMillis(RedisConf.MAX_WAIT); config.setMinIdle(RedisConf.MIN_IDLE); JEDIS_POOL = new JedisPool(config, RedisConf.HOST, RedisConf.PORT, RedisConf.TIMEOUT, RedisConf.AUTH); // 获取jredis实例 getJRedis(); } /** * 根据key-获取值 * @param key * @return * @throws Exception */ public <T extends Serializable> T get(String key) throws Exception { if (StringUtils.isEmpty(key)) return null; if (jedis == null) getJRedis(); if (!jedis.exists((CACHE_KEY + key).getBytes())) return null; T t = SerializableUtil.unserializable(jedis.get((CACHE_KEY + key).getBytes())); return t; } /** * 非持久化操做 * @param <T> * * @param key * @param t * @param seconds 过时时间 * @throws Exception */ public <T> void put(String key, T t ,int seconds) throws Exception { if (StringUtils.isEmpty(key) || t == null || seconds < 1) { return; } if (jedis == null) getJRedis(); jedis .setex((CACHE_KEY + key).getBytes(), seconds, SerializableUtil.serializable(t)); } /** * 持久化操做 * @param key * @param t * @throws Exception */ public <T> void put(String key, T t) throws Exception { if (StringUtils.isEmpty(key) || t == null) { return; } if (jedis == null) getJRedis(); jedis.set((CACHE_KEY + key).getBytes(), SerializableUtil.serializable(t)); } /** * 删除 * @param key */ public void remove(String key) { jedis.del(key.getBytes()); } private synchronized static void getJRedis() { if (JEDIS_POOL == null) { return; } jedis = JEDIS_POOL.getResource(); }public interface RedisConf { String HOST = "redis"; Integer PORT = 6379; String AUTH = "123";// 密码 ,redis-conf文件中的 requirepass属性后的值即为密码 // 链接的最大数目,默认值为8; // 若是赋值为-1,则表示不限制;若是pool已经分配了maxActive个jedis实例,则此时pool的状态为exhausted(耗尽)。 Integer MAX_TOTAL = 100; // 等待可用链接的最大时间,单位毫秒,默认值为-1,表示永不超时。 // 若是超过等待时间,则直接抛出JedisConnectionException; Integer MAX_WAIT = -1; // 最大空闲的jedis实例个数,默认值也是8 Integer MAX_IDLE = 30; // 最小链接数 Integer MIN_IDLE = 50; // 链接超时时间 Integer TIMEOUT = 5000; }转载请注明出处谢谢!