Jedis使用(带场景的例子)

首先说一下,Jedis是redis支持Java的第三方类库,我们可以使用Jedis类库来操作redis数据库。

关于基本的数据类型的操作就不上例子了,我们直接上一个有场景的例子。

 现在假设一个场景:User对象数据量很大,查询很繁琐,需要把User表的数据存放在缓存里面
         * 假设我们要这样查询:select * from user where age = 25 and sex = 'w'
         * 思路应该是:多种集合配合使用  hash和set类型同时使用
         * 指定查询业务  SYS_USER_SEL_AGE_25   //查询年龄25岁的
         * 指定查询业务  SYS_USER_SEL_SEX_m    //性别为m
         * 指定查询业务  SYS_USER_SEL_SEX_w    //性别为w
         * 数据准备:
         * 1、我们的用户数据都存放在hash类型中,name为SYS_USER_TABLE,key为uuid(用户的id),value为json格式的User数据
         * 2、然后根据查询业务的条件分别存放在各自的set中,set的name就是上面的(SYS_USE_SEL_AGE_25。。。)value是用户id
 例子代码:

public class TestRedis {
	@Test
	public void test1(){
		Jedis j = new Jedis("192.168.123.11", 6379);
		/*String name = j.get("name");
		System.out.println(name);*/
		/**
		 * 现在假设一个场景:User对象数据量很大,查询很繁琐,需要把user表的数据存放在缓存里面
		 * 假设我们要这样查询:select * from user where age = 25 and sex = 'm'
		 * 思路应该是多种集合配合使用  hash和set类型同时使用
		 * 指定查询业务  SYS_USER_SEL_AGE_25   //查询年龄25岁的
		 * 指定查询业务  SYS_USER_SEL_SEX_m    //性别为m
		 * 指定查询业务  SYS_USER_SEL_SEX_w    //性别为w
		 * 数据准备:
		 * 1、我们的用户数据都存放在hash类型中,name为SYS_USER_TABLE,key为uuid,value为json格式的user数据
		 * 2、然后根据查询业务的条件分别存放在各自的set中,set的name就是上面的(SYS_USE_SEL_AGE_25。。。)value是用户id
		 */
		final String SYS_USER_TABLE = "SYS_USER_TABLE";
		final String SYS_USER_SEL_AGE_25 = "SYS_USER_SEL_AGE_25";
		final String SYS_USER_SEL_SEX_m = "SYS_USER_SEL_SEX_m";
		final String SYS_USER_SEL_SEX_w = "SYS_USER_SEL_SEX_w";
		
		/**
		 * 数据在最底下已经准备好了
		 * 那么我们如果现在查询25岁的人呢
		 * select * from user where age = 25
		 * 1、我们先根据key获取set集合
		 * 2、然后根据拿到的id的set集合到hash里面拿user的详细信息
		 */
		Set<String> set = j.smembers(SYS_USER_SEL_AGE_25);
		for (Iterator<String> iterator = set.iterator(); iterator.hasNext();) {
			String string = (String) iterator.next();
			String userStr = j.hget(SYS_USER_TABLE, string);
			User user = FastJsonConvert.convertJsonStr2Object(userStr, User.class);
			System.out.println(user);
		}
		System.out.println("----------------------");
		/**
		 * 我们如果现在查询25岁的并且性别为w的呢
		 * select * from user where age = 25 and sex = 'w'
		 * 1、根据keys取交集
		 * 3、然后根据拿到的id的set集合到hash里面拿user的详细信息
		 */
		Set<String> set2 = j.sinter(SYS_USER_SEL_AGE_25,SYS_USER_SEL_SEX_w);
		for (Iterator<String> iterator = set2.iterator(); iterator.hasNext();) {
			String string = (String) iterator.next();
			String userStr = j.hget(SYS_USER_TABLE, string);
			User user = FastJsonConvert.convertJsonStr2Object(userStr, User.class);
			System.out.println(user);
		}
		//先准备一些数据
		/*Map<String,String> userMap = new HashMap<String, String>();
		
		String u1id = UUID.randomUUID().toString();
		User u1 = new User(u1id,"z3",25,"m");
		j.sadd(SYS_USER_SEL_AGE_25, u1id);
		j.sadd(SYS_USER_SEL_SEX_m, u1id);
		userMap.put(u1id, FastJsonConvert.convertObject2JsonStr(u1));
		
		String u2id = UUID.randomUUID().toString();
		User u2 = new User(u1id,"l4",26,"w");
		j.sadd(SYS_USER_SEL_SEX_w, u2id);
		userMap.put(u2id, FastJsonConvert.convertObject2JsonStr(u2));
		
		String u3id = UUID.randomUUID().toString();
		User u3 = new User(u1id,"w5",25,"m");
		j.sadd(SYS_USER_SEL_AGE_25, u3id);
		j.sadd(SYS_USER_SEL_SEX_m, u3id);
		userMap.put(u3id, FastJsonConvert.convertObject2JsonStr(u3));
		
		String u4id = UUID.randomUUID().toString();
		User u4 = new User(u4id,"h6",24,"w");
		j.sadd(SYS_USER_SEL_SEX_w, u4id);
		userMap.put(u4id, FastJsonConvert.convertObject2JsonStr(u4));
		
		String u5id = UUID.randomUUID().toString();
		User u5 = new User(u5id,"f7",22,"m");
		j.sadd(SYS_USER_SEL_SEX_m, u5id);
		userMap.put(u5id, FastJsonConvert.convertObject2JsonStr(u5));
		
		j.hmset(SYS_USER_TABLE, userMap);*/
	}
}

FastJson转换工具:

package com.demo.test;

import com.alibaba.fastjson.JSON;

public class FastJsonConvert {
	/**
	 * Json字符串     转为    Object
	 * @param data
	 * @param clazz
	 * @return
	 */
	public static <T>T convertJsonStr2Object(String data,Class<T> clazz) {
		try{
			T t = JSON.parseObject(data, clazz);
		    return t;
		}catch(Exception e){
			e.printStackTrace();
			return null;
		}
	}
	
	/**
	 * Object 转为    Json字符串
	 * @param obj
	 * @return
	 */
	public static String convertObject2JsonStr(Object obj){
		try{
			String text = JSON.toJSONString(obj);
			return text;
		}catch(Exception e){
			e.printStackTrace();
			return null;
		}
	}
	
}

实体类User:

package com.demo.test;

public class User {
	private String id;
	private String name;
	private int age;
	private String sex;
	public User(){}
	
	public User(String id, String name, int age, String sex) {
		this.id = id;
		this.name = name;
		this.age = age;
		this.sex = sex;
	}

	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 int getAge() {
		return age;
	}
	public void setAge(int age) {
		this.age = age;
	}
	public String getSex() {
		return sex;
	}
	public void setSex(String sex) {
		this.sex = sex;
	}

	@Override
	public String toString() {
		return "User [id=" + id + ", name=" + name + ", age=" + age + ", sex=" + sex + "]";
	}
	
}

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值