redis实现简单的条件查询

redis实现简单的条件查询

一、导入jar包

redis实现简单的条件查询

二、实现简单的条件查询

创建一个User实体类

public class User {     private String id;     private String name;     private String sex;     private int age;     public String getId() {         return id;     }     public User() { 	super();     }     public void setId(String id) {         this.id = id;     }     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 getAge() {         return age;     }     public void setAge(int age) {         this.age = age;     }     public User(String id, String name, String sex, int age) { 	super(); 	this.id = id; 	this.name = name; 	this.sex = sex; 	this.age = age;     }     @Override     public String toString() { 	return "User [id=" + id + ", name=" + name + ", sex=" + sex + ", age=" 		+ age + "]";     } }

创建5个对象并将其存入缓存中,以便我们进行测试

	//连接redis 	Jedis jedis = new Jedis("127.0.0.1",6379); 	 	Map<string> map = new HashMap<string>(); 	final String USER_TABLE = "USER_TABLE"; 	 	//向缓存中存入5条数据组成的map 	String uuid1 = UUID.randomUUID().toString(); 	User user1 = new User(uuid1, "y1", "m", 15); 	//将对象转为json 	map.put(uuid1, JSONObject.fromObject(user1).toString()); 	 	String uuid2 = UUID.randomUUID().toString(); 	User user2 = new User(uuid2, "y2", "m", 18); 	map.put(uuid2, JSONObject.fromObject(user2).toString()); 	 	String uuid3 = UUID.randomUUID().toString(); 	User user3 = new User(uuid3, "y3", "n", 25); 	map.put(uuid3, JSONObject.fromObject(user3).toString()); 	 	String uuid4 = UUID.randomUUID().toString(); 	User user4 = new User(uuid4, "y4", "n", 15); 	map.put(uuid4, JSONObject.fromObject(user4).toString()); 	 	String uuid5 = UUID.randomUUID().toString(); 	User user5 = new User(uuid5, "y5", "m", 25); 	map.put(uuid5, JSONObject.fromObject(user5).toString()); 	 	//把map存到缓存中 	jedis.hmset("USER_TABLE", map);</string></string>

redis中查询,可以看到已经将5个user对象存到缓存中

redis实现简单的条件查询

接下来,首先实现单条件的查询,比如说查询年龄为15的user和性别为m的user

由于Redis是nosql,无法直接像mysql那样利用where进行条件查询,所以Redis想实现条件查询,只能用一个笨方法:将所有符合条件的user存到一个set中。

Jedis jedis = new Jedis("127.0.0.1",6379); 	Map<string> map = new HashMap<string>(); 	 	final String USER_TABLE = "USER_TABLE"; 	//查询年龄为15,性别为n 	 	final String USER_TABLE_AGE_15 = "USER_TABLE_AGE_15"; 	final String USER_TABLE_SEX_m = "USER_TABLE_SEX_m"; 	final String USER_TABLE_SEX_n = "USER_TABLE_SEX_n"; 	 	//向缓存中存入5条数据组成的map 	 	String uuid1 = UUID.randomUUID().toString(); 	User user1 = new User(uuid1, "y1", "m", 15); 	//将对象转为json 	map.put(uuid1, JSONObject.fromObject(user1).toString()); 	//将符合条件的user的Id存到set中 	jedis.sadd(USER_TABLE_AGE_15,uuid1); 	jedis.sadd(USER_TABLE_SEX_m,uuid1); 	 	String uuid2 = UUID.randomUUID().toString(); 	User user2 = new User(uuid2, "y2", "m", 18); 	map.put(uuid2, JSONObject.fromObject(user2).toString()); 	jedis.sadd(USER_TABLE_SEX_m,uuid2); 	 	String uuid3 = UUID.randomUUID().toString(); 	User user3 = new User(uuid3, "y3", "n", 25); 	map.put(uuid3, JSONObject.fromObject(user3).toString()); 	 	String uuid4 = UUID.randomUUID().toString(); 	User user4 = new User(uuid4, "y4", "n", 15); 	map.put(uuid4, JSONObject.fromObject(user4).toString()); 	jedis.sadd(USER_TABLE_AGE_15,uuid4); 	 	String uuid5 = UUID.randomUUID().toString(); 	User user5 = new User(uuid5, "y5", "m", 25); 	map.put(uuid5, JSONObject.fromObject(user5).toString()); 	jedis.sadd(USER_TABLE_SEX_m,uuid5); 	 	//把map存到缓存中 	jedis.hmset("USER_TABLE", map);</string></string>

redis实现简单的条件查询

那么,如果想要查询年龄为15的user,就需要先从USER_TABLE_AGE_15中取出所有的uuid,然后再从USER_TABLE中取出user

	//获取年龄为15的user的uuid 	Set<string> age = jedis.smembers(USER_TABLE_AGE_15); 	 	//根据uuid获取user 	List<user> userJson = new ArrayList<user>(); 	 	for (Iterator iterator = age.iterator(); iterator.hasNext();) { 	    String string = (String) iterator.next(); 	    String jsonStr = jedis.hget(USER_TABLE, string); 	    JSONObject json = JSONObject.fromObject(jsonStr); 	    User user = (User) JSONObject.toBean(json, User.class); 	    userJson.add(user); 	    System.out.println(user); 	}</user></user></string>

结果如下:

User [id=63a970ec-e997-43e0-8ed9-14c5eb87de8b, name=y1, sex=m, age=15] User [id=aa074a2a-88d9-4b50-a99f-1375539164f7, name=y4, sex=n, age=15]

那么如果现在需要年龄为15,性别为m的user呢,很简单,获取
USER_TABLE_AGE_15 和 USER_TABLE_SEX_m的并集,再从USER_TABLE中获取.

//获取年龄为15并性别为m的user 	Set<string> userSet = jedis.sinter(USER_TABLE_AGE_15,USER_TABLE_SEX_m); 	List<user> users = new ArrayList<user>(); 	for (Iterator iterator = userSet.iterator(); iterator.hasNext();) { 	    String string = (String) iterator.next(); 	    String jsonStr = jedis.hget(USER_TABLE, string); 	    JSONObject json = JSONObject.fromObject(jsonStr); 	    User user = (User) JSONObject.toBean(json, User.class); 	    users.add(user); 	    System.out.println(user); 	}</user></user></string>
User [id=63a970ec-e997-43e0-8ed9-14c5eb87de8b, name=y1, sex=m, age=15]

更多redis知识请关注redis入门教程栏目。

以上就是

© 版权声明
THE END
喜欢就支持一下吧
点赞15 分享