package redis; import redis.clients.jedis.Jedis; public class BaseBO { private static final String SYSKEY = "0000:"; public Jedis getJedis(){ return XedisClient.getClient(); } public static String genSys(Object...objects){ return SYSKEY+XedisClient.genKey(objects); } public static Object getBean(String key, Object obj) throws Exception{ return XedisClient.getBean(key, obj); } public static String setBean(String key, Object obj) throws Exception{ return XedisClient.setBean(key, obj); } }
package redis; import redis.clients.jedis.JedisPool; import redis.clients.jedis.JedisPoolConfig; public class JedisPool2 extends JedisPool{ public JedisPool2(JedisPoolConfig config,String url,int port){ super(config, url,port); } }
package redis; import java.lang.reflect.Field; import java.util.HashMap; import java.util.Map; import org.apache.commons.beanutils.ConvertUtilsBean; import net.sf.json.JSONObject; import redis.clients.jedis.Jedis; import redis.clients.jedis.JedisPoolConfig; import redis.clients.jedis.exceptions.JedisConnectionException; public class XedisClient { private static JedisPool2 pool = new JedisPool2(new JedisPoolConfig(),"127.0.1",6379); private static ThreadLocal<Jedis> myClient = new ThreadLocal(); private static int reset = 3; private static Map<String, Field[]> clsMap = new HashMap<String, Field[]>(); //从线程池中获取实例,如果没有就从连接池中获取实例 private static Jedis myClient(){ int count = 0; Jedis jedis = null; while(jedis==null && count<3){ try{ jedis = myClient.get(); if(jedis ==null){ jedis = getClient(); myClient.set(jedis); } }catch(JedisConnectionException e){ returnBrokenResource(jedis); try{ Thread.sleep(3000); }catch(InterruptedException e1){ e1.printStackTrace(); } } } return jedis; } //从连接池中获取实例 public static Jedis getClient(){ return pool.getResource(); } //将Jedis对象使用后返回给连接池 public static void returnBrokenResource(Jedis j){ pool.returnBrokenResource(j); } //在用完连接池时,要手动关闭 public static void closePool(){ pool.destroy(); } //获取参数组合后的键结构 public static String genKey(Object...objects){ StringBuffer sb = new StringBuffer(); for(Object o:objects){ if(sb.length()>0){ sb.append(":"); } sb.append(o); } return sb.toString(); } //获取实例 public static Object getBean(String key, Object obj) throws Exception{ map2obj(myClient().hgetAll(key),obj); return obj; } //保存实例 public static String setBean(String key, Object obj) throws Exception{ String ret = myClient().hmset(key, obj2map(obj)); return ret; } //将获取的实例转换为对象 public static void map2obj(Map<String, String> map,Object obj) throws Exception{ if(map==null|| map.isEmpty()){ return; } //构建类型转换器 ConvertUtilsBean cub = new ConvertUtilsBean(); //利用反射机制获取对象的类 Class clazz = obj.getClass(); //获取已存的对象的字段 Field[] fieldlist = clsMap.get(clazz.getName()); if(fieldlist==null){//如果没有该类的对应值则重新添加 fieldlist = clazz.getDeclaredFields(); clsMap.put(clazz.getName(), fieldlist); } for(int i=0;i<fieldlist.length;i++){ Field field = fieldlist[i]; String value = map.get(field.getName()); Object val; if(value==null){ continue; } val = cub.convert(value, field.getType()); field.set(obj, val); } } //将实例转换为字符串 public static Map<String, String> obj2map(Object obj) throws Exception{ Map<String, String> map = new HashMap<String, String>(); if(obj == null){ return null; } Class clazz = obj.getClass(); //声明类中public、private和protected的所有字段 Field[] fieldlist = clsMap.get(clazz.getName()); if(fieldlist==null){ fieldlist = clazz.getDeclaredFields(); clsMap.put(clazz.getName(), fieldlist); } //定义转换工具 ConvertUtilsBean cub = new ConvertUtilsBean(); //获取实例对象的字段值 for(int i=0;i<fieldlist.length;i++){ Field field = fieldlist[i]; Object value = field.get(obj); if(value == null || value.getClass().isArray()){ continue; } map.put(field.getName(), cub.convert(value)); } return map; } }
package dao; import java.util.HashMap; import java.util.LinkedList; import java.util.List; import java.util.Map; import java.util.Set; import entity.Grades; import entity.Student; import entity.Teacher; import net.sf.json.JSONObject; import redis.BaseBO; public class RedisDao extends BaseBO{ public static void main(String[] args) throws Exception{ RedisDao dao = new RedisDao(); Student stu = new Student(); } private static final String H_TEA = "H_TEACHER"; private static final String H_STU = "H_STUDENT"; private static final String H_GRA = "H_GRADE"; private static final String H_EMP = "H_EMPLOYEES"; private static final String H_COM = "H_COMPANY"; private static final String H_DEPT = "H_DEPT"; /*哈希表的操作:field+value、field+value(包括list)*/ //添加实例field+value+使用hmset()函数 public boolean saveStudent(Student stu) throws Exception{ boolean flag = false; String result = setBean(genSys(H_STU,stu.getStuid()),stu); if(result == null){ return flag; } flag = true; return flag; } //添加实例field+value(list)+使用hset()函数 public boolean saveGrades(Grades gra) throws Exception{ boolean flag = false; JSONObject jsonobj = JSONObject.fromObject(gra); getJedis().hset(genSys(H_GRA), gra.getName(), jsonobj.toString()); flag = true; return flag; } //多实例查询每个实例一个field public Map<String,String> findGrades(){ return getJedis().hgetAll(genSys(H_GRA)); } //单个实例查询每个实例一个field public String findGrade(String field){ String jsonobj = getJedis().hget(genSys(H_GRA), field); return jsonobj; } //单实例查询每个实例有多个field public Student findStudent(String key) throws Exception{ Student stu = new Student(); return (Student) getBean(genSys(H_STU,key),stu); } //更新数据 public boolean updateStudent(Student stu) throws Exception{ boolean flag = false; String result = setBean(genSys(H_STU,stu.getStuid()),stu); if(result==null){ flag = true; } return flag; } //删除实例中的信息 public boolean deleteStudent(int id,String name){ boolean flag = false; getJedis().hdel(genSys(H_STU,id),name); return flag; } /*list的操作*/ //添加实例+在结尾处加入元素 public void saverightstuid(String key,String id){ getJedis().rpush(genSys(H_EMP,key), id); } //添加实例+在开始处加入元素 public void saveleftstuid(String key,String id){ getJedis().lpush(genSys(H_EMP,key), id); } //删除实例并返回实例从左侧 public String deleteleftStuid(String key){ return getJedis().lpop(genSys(H_EMP,key)); } //删除元素从右侧 public String deleterightStuid(String key){ return getJedis().rpop(genSys(H_EMP,key)); } //查询实例 public List<String> findStuid(String key, int start, int end){ return getJedis().lrange(genSys(H_EMP,key), start, end); } //获取单实例 public String findSingleStuid(String key, int index){ return getJedis().lindex(genSys(H_EMP,key), index); } //保留一定数量的元素 public void keepStuid(String key, int start, int end){ getJedis().ltrim(genSys(H_EMP,key), start, end); } //更新实例 public void updateStuid(String key, int index, String value){ getJedis().lset(genSys(H_EMP,key), index, value); } /*Set的操作*/ //添加元素 public void saveCompany(String key,String menber){ getJedis().sadd(genSys(H_COM,key), menber); } //添加多个元素 public void saveCompanys(String key,String[] menbers){ getJedis().sadd(genSys(H_COM,key), menbers); } //查询key中的全部元素 public Set<String> findCompanySet(String key){ Set<String> set = getJedis().smembers(genSys(H_COM,key)); return set; } //删除元素 public void deleteCompany(String key,String menber){ getJedis().srem(genSys(H_COM,key), menber); } //删除一个键 public void deleteCompanys(String key){ getJedis().del(genSys(H_COM,key)); } /*Sorted Set的操作*/ //添加单个元素 public void saveDept(String key, int score, String menber){ getJedis().zadd(genSys(H_DEPT,key), score, menber); } //添加多个元素 public void saveDepts(String key, Map<Double, String> map){ getJedis().zadd(genSys(H_DEPT,key), map); } //查询单个元素 public String findDept(String key, int score){ Set<String> set = getJedis().zrange(genSys(H_DEPT,key), score, score+1); String dept = set.iterator().next(); return dept; } //查询键的多个元素 public Set<String> findDepts(String key, int start, int end){ Set<String> set = getJedis().zrange(genSys(H_DEPT,key), start, end); return set; } //删除一个键的多个元素通过index删除 public void deleteDepts(String key, int start, int end){ getJedis().zremrangeByRank(genSys(H_DEPT,key), start, end); } //删除一个键的多个元素通过score public void deleteDeptByScore(String key, int start, int end){ getJedis().zremrangeByScore(genSys(H_DEPT,key), start, end); } //更新元素的score public void updateDeptScore(String key, int score, String member){ getJedis().zadd(genSys(H_DEPT,key), score, member); } //更新元素的member public void updateDeptMember(String key, String member){ getJedis().zincrby(genSys(H_DEPT,key), 0, member); } }
package entity; import java.util.List; public class Grades { public String name; public String id; public List<Student> list; public String getName() { return name; } public void setName(String name) { this.name = name; } public String getId() { return id; } public void setId(String id) { this.id = id; } public List<Student> getList() { return list; } public void setList(List<Student> list) { this.list = list; } }
package entity; public class Student { public int stuid; public int getStuid() { return stuid; } public void setStuid(int stuid) { this.stuid = stuid; } public String getName() { return name; } public void setName(String name) { this.name = name; } public String getSex() { return sex; } public void setSex(String sex) { this.sex = sex; } public int getBirthday() { return birthday; } public void setBirthday(int birthday) { this.birthday = birthday; } public String name; public String sex; public int birthday; }
package entity; import java.util.List; public class Teacher { public String id; public String getId() { return id; } public void setId(String id) { this.id = id; } public String getName() { return name; } public void setName(String name) { this.name = name; } public List<Student> getStudent() { return student; } public void setStudent(List<Student> student) { this.student = student; } public String name; public List<Student> student; }