0

0

redis实现简单的条件查询

尚

发布时间:2020-05-13 09:15:38

|

5027人浏览过

|

来源于CSDN

转载

redis实现简单的条件查询

一、导入jar包

1.jpg

二、实现简单的条件查询

创建一个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<String, String> map = new HashMap<String,String>();
	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对象存到缓存中

2.jpg

塑料卡板销售统计管理系统
塑料卡板销售统计管理系统

塑料卡板销售统计管理系统是一款对商品销售情况进行统一管理的系统。 程序特点1,简单,方便,网络操作,不受单台电脑文件保存限制2,纸质与数据库客户数据保存,查询变得更为方便3,免去久远的历史单据与数据查询烦恼4,方便的数据统计与自动核算功能5,丰富的销售数据录入与管理6, 销售清单(送货单)打印功能,支持条型码.7, 销售业绩提成统计功能8, 收款与未收款分开统计功能 后台地址:admin/logi

下载

接下来,首先实现单条件的查询,比如说查询年龄为15的user和性别为m的user

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

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

	//获取年龄为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);
	}

结果如下:

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<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);
	}
User [id=63a970ec-e997-43e0-8ed9-14c5eb87de8b, name=y1, sex=m, age=15]

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

热门AI工具

更多
DeepSeek
DeepSeek

幻方量化公司旗下的开源大模型平台

豆包大模型
豆包大模型

字节跳动自主研发的一系列大型语言模型

WorkBuddy
WorkBuddy

腾讯云推出的AI原生桌面智能体工作台

腾讯元宝
腾讯元宝

腾讯混元平台推出的AI助手

文心一言
文心一言

文心一言是百度开发的AI聊天机器人,通过对话可以生成各种形式的内容。

讯飞写作
讯飞写作

基于讯飞星火大模型的AI写作工具,可以快速生成新闻稿件、品宣文案、工作总结、心得体会等各种文文稿

即梦AI
即梦AI

一站式AI创作平台,免费AI图片和视频生成。

ChatGPT
ChatGPT

最最强大的AI聊天机器人程序,ChatGPT不单是聊天机器人,还能进行撰写邮件、视频脚本、文案、翻译、代码等任务。

相关专题

更多
C# ASP.NET Core微服务架构与API网关实践
C# ASP.NET Core微服务架构与API网关实践

本专题围绕 C# 在现代后端架构中的微服务实践展开,系统讲解基于 ASP.NET Core 构建可扩展服务体系的核心方法。内容涵盖服务拆分策略、RESTful API 设计、服务间通信、API 网关统一入口管理以及服务治理机制。通过真实项目案例,帮助开发者掌握构建高可用微服务系统的关键技术,提高系统的可扩展性与维护效率。

76

2026.03.11

Go高并发任务调度与Goroutine池化实践
Go高并发任务调度与Goroutine池化实践

本专题围绕 Go 语言在高并发任务处理场景中的实践展开,系统讲解 Goroutine 调度模型、Channel 通信机制以及并发控制策略。内容包括任务队列设计、Goroutine 池化管理、资源限制控制以及并发任务的性能优化方法。通过实际案例演示,帮助开发者构建稳定高效的 Go 并发任务处理系统,提高系统在高负载环境下的处理能力与稳定性。

38

2026.03.10

Kotlin Android模块化架构与组件化开发实践
Kotlin Android模块化架构与组件化开发实践

本专题围绕 Kotlin 在 Android 应用开发中的架构实践展开,重点讲解模块化设计与组件化开发的实现思路。内容包括项目模块拆分策略、公共组件封装、依赖管理优化、路由通信机制以及大型项目的工程化管理方法。通过真实项目案例分析,帮助开发者构建结构清晰、易扩展且维护成本低的 Android 应用架构体系,提升团队协作效率与项目迭代速度。

83

2026.03.09

JavaScript浏览器渲染机制与前端性能优化实践
JavaScript浏览器渲染机制与前端性能优化实践

本专题围绕 JavaScript 在浏览器中的执行与渲染机制展开,系统讲解 DOM 构建、CSSOM 解析、重排与重绘原理,以及关键渲染路径优化方法。内容涵盖事件循环机制、异步任务调度、资源加载优化、代码拆分与懒加载等性能优化策略。通过真实前端项目案例,帮助开发者理解浏览器底层工作原理,并掌握提升网页加载速度与交互体验的实用技巧。

97

2026.03.06

Rust内存安全机制与所有权模型深度实践
Rust内存安全机制与所有权模型深度实践

本专题围绕 Rust 语言核心特性展开,深入讲解所有权机制、借用规则、生命周期管理以及智能指针等关键概念。通过系统级开发案例,分析内存安全保障原理与零成本抽象优势,并结合并发场景讲解 Send 与 Sync 特性实现机制。帮助开发者真正理解 Rust 的设计哲学,掌握在高性能与安全性并重场景中的工程实践能力。

223

2026.03.05

PHP高性能API设计与Laravel服务架构实践
PHP高性能API设计与Laravel服务架构实践

本专题围绕 PHP 在现代 Web 后端开发中的高性能实践展开,重点讲解基于 Laravel 框架构建可扩展 API 服务的核心方法。内容涵盖路由与中间件机制、服务容器与依赖注入、接口版本管理、缓存策略设计以及队列异步处理方案。同时结合高并发场景,深入分析性能瓶颈定位与优化思路,帮助开发者构建稳定、高效、易维护的 PHP 后端服务体系。

458

2026.03.04

AI安装教程大全
AI安装教程大全

2026最全AI工具安装教程专题:包含各版本AI绘图、AI视频、智能办公软件的本地化部署手册。全篇零基础友好,附带最新模型下载地址、一键安装脚本及常见报错修复方案。每日更新,收藏这一篇就够了,让AI安装不再报错!

169

2026.03.04

Swift iOS架构设计与MVVM模式实战
Swift iOS架构设计与MVVM模式实战

本专题聚焦 Swift 在 iOS 应用架构设计中的实践,系统讲解 MVVM 模式的核心思想、数据绑定机制、模块拆分策略以及组件化开发方法。内容涵盖网络层封装、状态管理、依赖注入与性能优化技巧。通过完整项目案例,帮助开发者构建结构清晰、可维护性强的 iOS 应用架构体系。

246

2026.03.03

C++高性能网络编程与Reactor模型实践
C++高性能网络编程与Reactor模型实践

本专题围绕 C++ 在高性能网络服务开发中的应用展开,深入讲解 Socket 编程、多路复用机制、Reactor 模型设计原理以及线程池协作策略。内容涵盖 epoll 实现机制、内存管理优化、连接管理策略与高并发场景下的性能调优方法。通过构建高并发网络服务器实战案例,帮助开发者掌握 C++ 在底层系统与网络通信领域的核心技术。

34

2026.03.03

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
进程与SOCKET
进程与SOCKET

共6课时 | 0.4万人学习

Redis+MySQL数据库面试教程
Redis+MySQL数据库面试教程

共72课时 | 7.1万人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号