千家信息网

redis怎么实现条件查询?

发表于:2024-09-23 作者:千家信息网编辑
千家信息网最后更新 2024年09月23日,redis怎么实现条件查询?这个问题可能是我们日常工作经常见到的。通过这个问题,希望你能收获更多。今天跟随小编一起来看解决方案吧。一、导入jar包二、实现简单的条件查询创建一个User实体类publi
千家信息网最后更新 2024年09月23日redis怎么实现条件查询?

redis怎么实现条件查询?这个问题可能是我们日常工作经常见到的。通过这个问题,希望你能收获更多。今天跟随小编一起来看解决方案吧。

一、导入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 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对象存到缓存中

接下来,首先实现单条件的查询,比如说查询年龄为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        Set age = 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        Set userSet = 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实现条件查询的方法介绍,代码示例简单明了,如果在日常工作遇到此问题。通过这篇文章,希望你能有所收获,更多详情敬请关注行业资讯频道!

0