千家信息网

redis怎么实现条件查询?

发表于:2025-01-22 作者:千家信息网编辑
千家信息网最后更新 2025年01月22日,redis怎么实现条件查询?这个问题可能是我们日常工作经常见到的。通过这个问题,希望你能收获更多。今天跟随小编一起来看解决方案吧。一、导入jar包二、实现简单的条件查询创建一个User实体类publi
千家信息网最后更新 2025年01月22日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实现条件查询的方法介绍,代码示例简单明了,如果在日常工作遇到此问题。通过这篇文章,希望你能有所收获,更多详情敬请关注行业资讯频道!

查询 条件 年龄 缓存 对象 性别 问题 数据 方法 日常工作 更多 工作 接下来 代码 实体 就是 方案 明了 比如说 示例 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 服务器 数据库 管理 软件开发面试问项目是否上线 长江证券数据库 交通防疫网络安全手抄报 广电网络安全播出工作 软件开发协作平台 自主部署 沛县软件开发项目管理在线咨询 阿里云免费云服务器哪个好 根服务器是那个公司管理 进入服务器管理器的方法 软件开发商评分标准 大智慧 全推 服务器 一般部署erp的服务器多少钱 上海员工量化积分管理软件开发 计算机网络技术局域网作业 互联网玺农科技获得融资 qq文件传输显示服务器拒绝 奥特曼系列ol服务器多少钱 软件要怎么换服务器 我的世界5人服务器 长沙专业软件开发代码 巨麒麟网络技术有限公司 游戏服务器ip冲突 数据库外键添加需要注意什么 软件开发包括哪些内容内容 县局网络安全专业帮扶 网络安全技能有哪些内容 末日浩劫服务器群组在哪 网易企业邮箱服务器主机 数据库字节字符串
0