redis怎么实现条件查询?
发表于:2026-11-03 作者:千家信息网编辑
千家信息网最后更新 2026年11月03日,redis怎么实现条件查询?这个问题可能是我们日常工作经常见到的。通过这个问题,希望你能收获更多。今天跟随小编一起来看解决方案吧。一、导入jar包二、实现简单的条件查询创建一个User实体类publi
千家信息网最后更新 2026年11月03日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 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实现条件查询的方法介绍,代码示例简单明了,如果在日常工作遇到此问题。通过这篇文章,希望你能有所收获,更多详情敬请关注行业资讯频道!
查询
条件
年龄
缓存
对象
性别
问题
数据
方法
日常工作
更多
工作
接下来
代码
实体
就是
方案
明了
比如说
示例
数据库的安全要保护哪些东西
数据库安全各自的含义是什么
生产安全数据库录入
数据库的安全性及管理
数据库安全策略包含哪些
海淀数据库安全审计系统
建立农村房屋安全信息数据库
易用的数据库客户端支持安全管理
连接数据库失败ssl安全错误
数据库的锁怎样保障安全
互联网黑科技
互联网科技园
互联网科技股
百单网互联网科技有限公司怎么样
互联网的科技
万易互联网科技
互联网科技股票
美国互联网黑科技
互联网科技ppt模板
友谊互联网络科技
互联网科技论坛
互联网科技生活的内容
哈尔滨秒房互联网科技有限公司
互联网公司会议桌创意科技软装饰
常德市电业局互联网科技部
金融科技与互联网金融相同和不同
想开互联网科技公司怎么样
互联网公司黑科技创始人
富国互联网金融科技混合基金
半导体行业属于互联网高科技类吗
上海喔噻互联网科技有限公司
工业互联网科技新基建
菲比寻常互联网科技
碳银互联网科技有限公司
汽车互联网创新科技园
苏州五指互联网络科技有限
辽宁互联网新科技
内蒙古九一互联网科技
互联网第三次科技革命特征
互联网科技大会大佬