redis怎么实现条件查询?
redis怎么实现条件查询?这个问题可能是我们日常工作经常见到的。通过这个问题,希望你能收获更多。今天跟随小编一起来看解决方案吧。
创新互联公司专注于黎平网站建设服务及定制,我们拥有丰富的企业做网站经验。 热诚为您提供黎平营销型网站建设,黎平网站制作、黎平网页设计、黎平网站官网定制、重庆小程序开发服务,打造黎平网络公司原创品牌,更为您提供黎平网站排名全网营销落地服务。
一、导入jar包
.jpg)
二、实现简单的条件查询
创建一个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 map = new HashMap();
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对象存到缓存中
.jpg)
接下来,首先实现单条件的查询,比如说查询年龄为15的user和性别为m的user
由于Redis是NOSQL,无法直接像MySQL那样利用where进行条件查询,所以Redis想实现条件查询,只能用一个笨方法:将所有符合条件的user存到一个set中。
Jedis jedis = new Jedis("127.0.0.1",6379);
Map map = new HashMap();
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 Setage = jedis.smembers(USER_TABLE_AGE_15); //根据uuid获取user List userJson = new ArrayList (); 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呢,很简单,获取
USER_TABLE_AGE_15 和 USER_TABLE_SEX_m的并集,再从USER_TABLE中获取.
//获取年龄为15并性别为m的user SetuserSet = jedis.sinter(USER_TABLE_AGE_15,USER_TABLE_SEX_m); List users = new ArrayList (); 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怎么实现条件查询?
URL标题:http://www.jxjierui.cn/article/gpdsgg.html


咨询
建站咨询
