redis实现简单的条件查询


当前第2页 返回上一页

由于Redis是nosql,无法直接像mysql那样利用where进行条件查询,所以Redis想实现条件查询,只能用一个笨方法:将所有符合条件的user存到一个set中。

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

Jedis jedis = new Jedis("127.0.0.1",6379);

    Map<String, String> map = new HashMap<String,String>();

     

    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);

3.jpg

那么,如果想要查询年龄为15的user,就需要先从USER_TABLE_AGE_15中取出所有的uuid,然后再从USER_TABLE中取出user

1

2

3

4

5

6

7

8

9

10

11

12

13

14

//获取年龄为15的user的uuid

Set<String> age = jedis.smembers(USER_TABLE_AGE_15);

 

//根据uuid获取user

List<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);

}

结果如下:

1

2

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中获取.

1

2

3

4

5

6

7

8

9

10

11

//获取年龄为15并性别为m的user

    Set<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);

    }

1

User [id=63a970ec-e997-43e0-8ed9-14c5eb87de8b, name=y1, sex=m, age=15]

更多redis知识请关注redis入门教程栏目。

以上就是redis实现简单的条件查询的详细内容,更多文章请关注木庄网络博客

返回前面的内容

相关阅读 >>

Redis怎么设置最大占用内存

Redis中的关系查询介绍

Redis info命令介绍

Redis报错windows error 0x70的解决方法

Redis怎么重启哨兵服务

Redis默认过期时间是多少

什么时候使用Redis集群锁

Redis一个实例能存多少个key

Redis怎么实现分布式事务

centos7.6安装mysql和Redis的教程

更多相关阅读请进入《Redis》频道 >>


数据库系统概念 第6版
书籍

数据库系统概念 第6版

机械工业出版社

本书主要讲述了数据模型、基于对象的数据库和XML、数据存储和查询、事务管理、体系结构等方面的内容。



打赏

取消

感谢您的支持,我会继续努力的!

扫码支持
扫码打赏,您说多少就多少

打开支付宝扫一扫,即可进行扫码打赏哦

分享从这里开始,精彩与您同在

评论

管理员已关闭评论功能...