重庆小潘seo博客

当前位置:首页 > 重庆网络营销 > 小潘杂谈 >

小潘杂谈

redis实现简单的条件查询

时间:2020-09-22 13:20:07 作者:重庆seo小潘 来源:
一、导入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

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;}@Overridepublic String toString() {return "User [id=" + id + ", name=" + name + ", sex=" + sex + ", age="+ age + "]";}}创建5个对象并将其存入缓存中,以便我们进行测试//连接redisJedis jedis = new Jedis("127.0.0.1",6379);Map<String, String> map = new HashMap<String,String>();final String USER_TABLE = "USER_TABLE";//向缓存中存入5条数据组成的mapString uuid1 = UUID.randomUUID().toString();User user1 = new User(uuid1, "y1", "m", 15);//将对象转为jsonmap.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对象存到缓存中

redis实现简单的条件查询

接下来,首先实现单条件的查询,比如说查询年龄为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,性别为nfinal 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条数据组成的mapString uuid1 = UUID.randomUUID().toString();User user1 = new User(uuid1, "y1", "m", 15);//将对象转为jsonmap.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);redis实现简单的条件查询

那么,如果想要查询年龄为15的user,就需要先从USER_TABLE_AGE_15中取出所有的uuid,然后再从USER_TABLE中取出user//获取年龄为15的user的uuidSet<String> age = jedis.smembers(USER_TABLE_AGE_15);//根据uuid获取userList<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呢,很简单,获取USER_TABLE_AGE_15 和 USER_TABLE_SEX_m的并集,再从USER_TABLE中获取.//获取年龄为15并性别为m的userSet<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实现简单的条件查询的详细内容,更多请关注小潘博客其它相关文章!