【概述】

  假设现在有一个User表,其中有id,name,age,sex等字段,完成如下要求的SQL语句为:

1.查找所有age=18 的User

select  * from user where age=18 ;

2.查找所有sex="M"("M"代表男性)的User

select * from user where sex="M" ;

3.查找所有sex="M" and age=18 的User

select * from user where age=18 and sex="M" ;

在MySQL关系型数据库中,这些操作是非常轻松的,但是在Redis这种非关系型数据库中,我们需要经过设计才能完成上述的功能。

【工程截图】

【redis.properties 配置文件】

ip=127.0.0.1
port=6379
maxActive=100
maxIdle=5
maxWait=100
isTestOnBorrow=true

【RedisUtils.java】

package com.higgin.util;import java.io.InputStream;
import java.util.Properties;import redis.clients.jedis.Jedis;
import redis.clients.jedis.JedisPool;
import redis.clients.jedis.JedisPoolConfig;public class RedisUtils {private static String ip;private static int port;private static int maxActive;  //最大连接数private static int maxIdle;private static long  maxWait;private static boolean isTestOnBorrow;private static JedisPool jedisPool;private static JedisPoolConfig config;private static Jedis jedis;static{   //静态代码块中完成解析redis.properties各种配置的工作try{InputStream in=RedisUtils.class.getClassLoader().getResourceAsStream("redis.properties");Properties prop =new Properties();prop.load(in);ip=prop.getProperty("ip");port=Integer.parseInt(prop.getProperty("port"));maxActive=Integer.parseInt(prop.getProperty("maxActive"));maxIdle=Integer.parseInt(prop.getProperty("maxIdle"));maxWait=Long.parseLong(prop.getProperty("maxWait"));isTestOnBorrow=Boolean.parseBoolean(prop.getProperty("isTestOnBorrow"));config=new JedisPoolConfig();  //实例化一个Jedis连接池配置 的对象实例config.setMaxActive(maxActive);  //控制一个pool可以分配多少个jedis实例,通过JedisPool.getResource()获取config.setMaxIdle(maxIdle); //控制一个pool最多有多少个状态为idle(空闲)的jedis实例config.setMaxWait(1000*maxWait); //当borrow(引入)一个jedis实例时,最大的等待时间,如果超过等待时间,直接抛出JedisConnectionException
            config.setTestOnBorrow(isTestOnBorrow);jedisPool=new JedisPool(config,ip,port);}catch(Exception e){e.printStackTrace();}}/*** 从连接池中得到一个jedis实例* @return*/public static Jedis getJedis(){jedis=jedisPool.getResource();return jedis;}/*** 将jedis返还到连接池 */public static void returnResource(Jedis jedis){if(jedis!=null){jedisPool.returnResource(jedis);}}}

【JsonUtils.java】

package com.higgin.util;import com.alibaba.fastjson.JSON;public class JsonUtils {/*** 对象obj转成Json字符串*/public static String getJsonString(Object obj){return JSON.toJSONString(obj);}/*** json字符串转成 Object对象 */public static<T> T getObjectFromJsonString(String json,Class<T> clazz){return JSON.parseObject(json,clazz);}
}

【User.java】

package com.higgin.domain;public class User {final public static String USER_KEY = "user_key";final public static String USER_AGE_KEY_18 = "user_age_key18";final public static String USER_SEX_KEY_M ="user_sex_key_m";final public static String USER_SEX_KEY_W ="user_sex_key_w";private String id;private String name;private int age;private String sex;//注意:要想被FastJson的JsonString-->Object,对应的Object必须有构造方法public User(){  }public User(String id, String name, int age, String sex) {this.id = id;this.name = name;this.age = age;this.sex = sex;}public String getId() {return id;}public void setId(String id) {this.id = id;}public String getName() {return name;}public void setName(String name) {this.name = name;}public int getAge() {return age;}public void setAge(int age) {this.age = age;}public String getSex() {return sex;}public void setSex(String sex) {this.sex = sex;}@Overridepublic String toString() {return "User [id=" + id + ", name=" + name + ", age=" + age + ", sex="+ sex + "]";}
}

【UserRedisDao.java 接口】

package com.higgin.dao;import java.util.List;
import com.higgin.domain.User;public interface UserRedisDao {public void setUserObject(String key,String id,User user);public void setUserJsonStr(String key,String id, String userJsonStr);public void setKeyId(String key,String id);public User getUser(String key,String id);public List<String> getIds(String key);public List<String> getIdsInter(String key1,String key2);  //取出两个key所在的集合的交集public List<String> getUsersByFields(String key,String[] fields);  //返回对应的key中,满足fiedls数组的所有value
}

【UserRedisDaoImpl.java】

package com.higgin.dao.impl;import java.util.ArrayList;
import java.util.List;
import java.util.Set;import redis.clients.jedis.Jedis;import com.higgin.dao.UserRedisDao;
import com.higgin.domain.User;
import com.higgin.util.JsonUtils;
import com.higgin.util.RedisUtils;public class UserRedisDaoImpl implements UserRedisDao{Jedis jedis=RedisUtils.getJedis();@Overridepublic void setUserObject(String key, String id, User user) {setUserJsonStr(key,id,JsonUtils.getJsonString(user));}@Overridepublic void setUserJsonStr(String key,String id, String userJsonStr) {jedis.hset(key, id, userJsonStr);}@Overridepublic User getUser(String key,String userId) {String userJsonStr=jedis.hget(key, userId);return JsonUtils.getObjectFromJsonString(userJsonStr, User.class);}@Overridepublic List<String> getIds(String key) {Set<String> ids= jedis.smembers(key);List<String> idsList=new ArrayList<String>(ids);return idsList;}@Overridepublic void setKeyId(String key, String id) {jedis.sadd(key, id);}@Overridepublic List<String> getIdsInter(String key1, String key2) {Set<String> ids=jedis.sinter(key1,key2);  //得到两个id集合的交集List<String> idsList=new ArrayList<String>(ids);return idsList;}@Overridepublic List<String> getUsersByFields(String key, String[] fields) {return jedis.hmget(key, fields);}}

【TestUserRedisDao.java】

package com.higgin.dao;import java.util.List;
import redis.clients.jedis.Jedis;import com.higgin.dao.impl.UserRedisDaoImpl;
import com.higgin.domain.User;
import com.higgin.util.RedisUtils;public class TestUserRedisDao {public static void main(String[] args) {Jedis jedis=RedisUtils.getJedis();User u1 =new User("10001", "zhangsan", 18, "M");User u2 =new User("10002", "lisi",     20, "W");User u3 =new User("10003", "wangwu",   18, "W");User u4 =new User("10004", "maliu",    30, "W");User u5 =new User("10005", "zhengqi",  18, "M");User u6 =new User("10006", "songba",   35, "M");UserRedisDao userDao=new UserRedisDaoImpl();userDao.setUserObject(User.USER_KEY, u1.getId(), u1);userDao.setUserObject(User.USER_KEY, u2.getId(), u2);userDao.setUserObject(User.USER_KEY, u3.getId(), u3);userDao.setUserObject(User.USER_KEY, u4.getId(), u4);userDao.setUserObject(User.USER_KEY, u5.getId(), u5);userDao.setUserObject(User.USER_KEY, u6.getId(), u6);userDao.setKeyId(User.USER_AGE_KEY_18, u1.getId());userDao.setKeyId(User.USER_AGE_KEY_18, u3.getId());userDao.setKeyId(User.USER_AGE_KEY_18, u5.getId());userDao.setKeyId(User.USER_SEX_KEY_M, u1.getId());userDao.setKeyId(User.USER_SEX_KEY_M, u5.getId());userDao.setKeyId(User.USER_SEX_KEY_M, u6.getId());//完成select * from user where age=18List<String> ageIdsList=userDao.getIds(User.USER_AGE_KEY_18);System.out.println(ageIdsList);String[] ageIdsArray =(String[]) ageIdsList.toArray(new String[ageIdsList.size()]);  //id的List --> 数组List<String> userJsonList1=userDao.getUsersByFields(User.USER_KEY,ageIdsArray);    //从user的hash类型中获取多个filed的value,传入的field可以为字符串数组System.out.println(userJsonList1);   //打印出所有的满足条件的user
        System.out.println("------------------------------------------------------");//完成select * from user where sex="M"List<String> sexManList=userDao.getIds(User.USER_SEX_KEY_M);System.out.println(sexManList);String[] sexManArray=sexManList.toArray(new String[sexManList.size()]);List<String> userJsonList2=userDao.getUsersByFields(User.USER_KEY, sexManArray);System.out.println(userJsonList2);System.out.println("------------------------------------------------------");//完成select * from user where age=18 and sex="M"List<String> ageAndSexIdsList=userDao.getIdsInter(User.USER_AGE_KEY_18, User.USER_SEX_KEY_M); //取交集System.out.println(ageAndSexIdsList);String[] ageAndSexArray=(String[])ageAndSexIdsList.toArray(new String[ageAndSexIdsList.size()]);List<String> userJsonList3=userDao.getUsersByFields(User.USER_KEY, ageAndSexArray);System.out.println(userJsonList3);jedis.quit();}
}

【运行结果】

转载于:https://www.cnblogs.com/HigginCui/p/6599627.html

06_Jedis完成MySQL的条件查询案例相关推荐

  1. MongoDB自定义条件查询案例

    MongoDB自定义条件查询案例

  2. mysql中条件查询加排序和索引的关系

    跟一个朋友,不错公司的主管交流时,对于mysql中条件查询和排序时 与索引的关系 mysql> explain select * from article where title='希望光伏企业 ...

  3. EasyClick 之 MySQL where条件查询

    目录 EasyClick 之 MySQL where条件查询 `where` 条件查询介绍 `where`语句支持的运算符: `where`条件查询语法格式 比较运算符查询 逻辑运算符查询 模糊查询 ...

  4. php mysql or_mysql条件查询and or使用方法及优先级实例分析

    本文实例讲述了mysql条件查询and or使用方法及优先级.分享给大家供大家参考,具体如下: mysql and与or介绍 AND 和 OR 可在 WHERE 子语句中把两个或多个条件结合起来. 使 ...

  5. mysql包含条件查询怎么写_mysql中where条件查询

    #进阶2:条件查询 /* 语法: SELECT 查询列表 FROM 表名 WHERE 筛选条件: 分类: 一.按条件表达式筛选 条件运算符:> < = <> >= < ...

  6. mysql多条件查询_使用dsum轻松搞定多条件查询,学会它,再也想用sumifs了

    在excel中条件求和想必大家都不陌生,这个可以说是我们工作中经常遇到的问题,常见的条件求和函数有sumif以及sumifs,但是还有一个更加强但知道的人却非常少的函数,他就是dsum函数,dsum相 ...

  7. springboot封装统一查询对象进行多条件查询案例(mybatis和mybatis-plus+反射两种版本)

    文章目录 mybatis版本: 通用查询接口 封装辅助查询类: 通用controller: 自定义注解 controller service mapper测试 mybatis-plus实现版本 ent ...

  8. mysql多条件查询_excel用字典处理多条件查询问题

    我们今天分享的内容是使用VBA代码实现多条件查询的功能. 如下图所示,表名为"明细表"的数据是明细数据. 再如下图所示,表名为"查询表"的数据是需要查询的数据. ...

  9. MySQL之条件查询

    2. 条件查询 syntax: select 查询列表 from 表名 where 筛选条件; (where当后面成立的话进行显示) 执行顺序是:1.查看表名 2.where 3. select 筛选 ...

最新文章

  1. Java 集合——List集合
  2. 条形图与直方图的区别
  3. 影响数据库性能的因素
  4. django项目允许其他机器访问
  5. JZOJ 5475. 【NOIP2017提高组正式赛】逛公园
  6. java命令查看 java.io.tmpdir 参数值
  7. arcgis几何修复有作用吗_ArcGis拓扑的那些事儿(拓扑应用过程二)
  8. keras中的EarlyStopping
  9. python123基本统计值计算_基本统计值计算
  10. c语言unicode编码转ascii码,编码转换(ASCII和Unicode、Unicode和中文相互转换)
  11. 深度可分离卷积(Depthwise seperable convolution)
  12. 简单动态字符串(SDS)
  13. 《遥远的救世主》(摘录)
  14. Object.entries() 的使用
  15. httpwebrequest下载文件失败的解决方案
  16. 谷歌play支付_Google Play的新功能
  17. 无线网络CSMA/CA原理分析以及相关技术的介绍和分析
  18. HAC集群状态检查、切换、数据同步验证方法
  19. android auto华为版_auto.js的使用以及薅羊毛插件示例
  20. Nebula Graph

热门文章

  1. min—width的使用
  2. 关于“服务器提交了协议冲突. Section=ResponseStatusLine问题
  3. 再读阿朱的《走出软件作坊》摘抄整理——20140617
  4. TOP10十大GPS导航手机(有车一族必备手机)
  5. Red Hat日志文件系统-ext3
  6. logrus 输出多个文件_Logrus源码阅读(1)基本用法
  7. android 拨打电话 发送短信 权限,Android开发实现拨打电话与发送信息的方法分析...
  8. mysql 2100,MySQL 实现准实时的表级别DML计数
  9. PG13用pg_rman进行备份恢复
  10. Python机器学习:多项式回归与模型泛化003过拟合与欠拟合