redis实现简单的条件查询

互联网 20-5-13

一、导入jar包

二、实现简单的条件查询

创建一个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, String> map = new HashMap<String,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);

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

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

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

Jedis jedis = new Jedis("127.0.0.1",6379); 	Map<String, String> map = new HashMap<String,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);

那么,如果想要查询年龄为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 [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 	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 [id=63a970ec-e997-43e0-8ed9-14c5eb87de8b, name=y1, sex=m, age=15]

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

以上就是redis实现简单的条件查询的详细内容,更多内容请关注技术你好其它相关文章!

来源链接:
免责声明:
1.资讯内容不构成投资建议,投资者应独立决策并自行承担风险
2.本文版权归属原作所有,仅代表作者本人观点,不代表本站的观点或立场
标签: redis
上一篇:php获取远程图片并下载保存到本地的方法分析 下一篇:SpringBoot整合redis缓存的方法

相关资讯