封装Redis部分基本操作(键值都封装为对象类型)

来源:互联网 发布:淘宝客服周总结计划 编辑:程序博客网 时间:2024/06/05 19:44

一.序列化工具类(因为Jedis的键是区分String,byte类型的,所以使用序列化成byte,再使用反序列化显示)

package com.yk;import java.io.ByteArrayInputStream;import java.io.ByteArrayOutputStream;import java.io.IOException;import java.io.ObjectInputStream;import java.io.ObjectOutputStream;public class SerialoizebleUtil {      /**    * 将对象序列化:要求对象要实现序列化接口    */   public static byte[] serialize(Object obj ){      ObjectOutputStream oos = null; //对象输出流      ByteArrayOutputStream baos = null;//字节数组输出流            byte[] bt=null;            try {         baos = new ByteArrayOutputStream();         oos=new ObjectOutputStream(baos);         oos.writeObject(obj);         bt=baos.toByteArray();      } catch (IOException e) {         e.printStackTrace();      }finally{         if(baos!=null){            try {               baos.close();            } catch (IOException e) {               e.printStackTrace();            }         }      }      return bt;   }      //反序列化,将byte字节转换为对象   public static Object unSerialize(byte[] bt){      ByteArrayInputStream bais = null;      Object object =null;               try {         bais = new ByteArrayInputStream(bt);         ObjectInputStream ois = new ObjectInputStream(bais);         object  = ois .readObject();      } catch (Exception e) {         e.printStackTrace();      }finally{         if(bais!=null){            try {               bais.close();            } catch (IOException e) {               e.printStackTrace();            }         }      }      return object;   }      }

二.redis连接池类(读取配置文件,创建redis连接池,获取redis连接)

package com.yk;import redis.clients.jedis.Jedis;import redis.clients.jedis.JedisPool;import redis.clients.jedis.JedisPoolConfig;import java.util.ResourceBundle;public class RedisPool {   private static JedisPool pool =null;   /*使用静态代码块,优先加载顺序在static方法之前    * 初始化redis连接配置    */      static {      //得到redis.properties 中的配置信息      ResourceBundle bundle = ResourceBundle.getBundle("redis");      if(bundle==null){         throw new IllegalArgumentException("[redis.properties] is not found");      }      //配置信息对象config      JedisPoolConfig config = new JedisPoolConfig();      config.setMaxTotal(Integer.valueOf(bundle.getString("redis.pool.maxActive")));      config.setMaxIdle(Integer.valueOf(bundle.getString("redis.pool.maxIdle")));      config.setMaxWaitMillis(Long.valueOf(bundle.getString("redis.pool.maxWait")));      config.setTestOnBorrow(Boolean.valueOf(bundle.getString("redis.pool.testOnBorrow")));      config.setTestOnReturn(Boolean.valueOf(bundle.getString("redis.pool.testOnReturn")));      //创建redis连接池      pool =  new JedisPool( config,bundle.getString("redis.ip"),Integer.valueOf(bundle.getString("redis.port")));   }   /**    * 获取jedis实例    * 在获取jedis实例方法前,加上序列化    * @return    */   public synchronized static Jedis getJedis(){      if(pool!=null){         return pool.getResource();      }else{         return null;      }   }   /**    * 释放jedis实例资源    */   public static void returnResource(Jedis jedis){      if(jedis!=null){         jedis.close();      }   }}

三.redis配置文件(详细配置可以自己百度,这里只写出最基本的配置)

redis.pool.maxActive=1024redis.pool.maxIdle=200redis.pool.maxWait=100redis.pool.testOnBorrow=trueredis.pool.testOnReturn=trueredis.ip=127.0.0.1redis.port=6379

四.封装Redis的基本操作的接口

package com.yk;import java.util.List;public interface RedisDo {    public boolean RedisExist(Object key);    public void RedisSet(Object key, Object value);    public Object RedisGet(Object key);    public Object RedisGetSet(Object key, Object value);    public void RedisMset(Object... keysvalues);    public List<Object> RedisMget(Object... keys);    public void RedisSetex(Object key, int seconds, Object value);    public void RedisExpire(Object key, int seconds);    public void RedisPersist(Object key);    public Long RedisTTL(Object key);    public void RedisDel(Object... keys);    public void RedisRename(Object key, Object newkey);}

五.接口实现

package com.yk;import redis.clients.jedis.Jedis;import java.util.LinkedList;import java.util.List;public class RedisDaoImpl implements RedisDo{    /**     * 从连接池中获取实例     * @return     */    public static Jedis GetJedis(){        return RedisPool.getJedis();    }    /**     * 序列化     * @param object     * @return     */    public byte[] serializeObj(Object object){        return SerialoizebleUtil.serialize(object);    }    /**     * 反序列化     * @param bt     * @return     */    public Object unSerializeByte(byte[] bt){        return SerialoizebleUtil.unSerialize(bt);    }    /**     * 判断键是否存在     * @param key     * @return     */    public boolean RedisExist(Object key) {        return GetJedis().exists(serializeObj(key));    }    /**     * set     * @param key     * @param value     */    public void RedisSet(Object key, Object value) {        GetJedis().set(serializeObj(key),serializeObj(value));    }    /**     * get     * @param key     * @return     */    public Object RedisGet(Object key) {        return unSerializeByte(GetJedis().get(serializeObj(key)));    }    /**     * 将给定 key 的值设为 value ,并返回 key 的旧值(old value)     * @param key     * @param value     * @return     */    public Object RedisGetSet(Object key, Object value) {        return unSerializeByte(GetJedis().getSet(serializeObj(key),serializeObj(value)));    }    /**     * 存入多个键值对 自己封装     * @param keysvalues     */    public void RedisMset(Object... keysvalues){        List<Object> list = new LinkedList<Object>();        int i =0;        if(keysvalues!=null){            for (Object object :keysvalues){                list.add(i,object);                i++;            }        }        for (i=0;i<list.size();i++){            GetJedis().set(serializeObj(list.get(i)),serializeObj(list.get(i+1)));            i=i+1;        }    }    /**     * 输入多个键得到List<>     * @param keys     * @return     */    public List<Object> RedisMget(Object...keys){        List<byte[]> keyslist = new LinkedList<byte[]>();        int i =0;        if(keys!=null){            for(Object object :keys){                keyslist.add(i,serializeObj(object));                i++;            }        }        List<Object> listObj = new LinkedList<Object>();        for (i=0;i<keyslist.size();i++){            listObj.add(i,unSerializeByte(GetJedis().get(keyslist.get(i))));        }        return listObj;    }    /**     * 设置一个有过期时间的key-value     * @param key     * @param seconds     * @param value     */    public void RedisSetex(Object key, int seconds,Object value) {        GetJedis().setex(serializeObj(key),seconds,serializeObj(value));    }    /**     * 单独设置键的过期时间     * @param key     * @param seconds     */    public void RedisExpire(Object key, int seconds) {        GetJedis().expire(serializeObj(key),seconds);    }    /**     * 移除键的过期时间,键保持持久     * @param key     */    public void RedisPersist(Object key) {        GetJedis().persist(serializeObj(key));    }    /**     * 查看键的剩余过期时间     * @param key     * @return     */    public Long RedisTTL(Object key) {        return GetJedis().ttl(serializeObj(key));    }    /**     * 删除一个或者多个键     * @param keys     */    public void RedisDel(Object... keys) {        List<Object> list = new LinkedList<Object>();        int i =0;        if(keys!=null){            for (Object object :keys){                list.add(i,object);                i++;            }        }        for (i=0;i<list.size();i++){            GetJedis().del(serializeObj(list.get(i)));        }    }    /**     * 重命名key     * @param key     * @param newkey     */    public void RedisRename(Object key, Object newkey) {        GetJedis().rename(serializeObj(key),serializeObj(newkey));    }} 

六.上面使用的是IDEA,代码可以直接生产Jar文件使用,需要更多的操作可以自己封装Jedis!

To be continue......

0 0