redis增大查询速度(项目中实际应用举例)

2024-06-24 08:18

本文主要是介绍redis增大查询速度(项目中实际应用举例),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

1、关于保存User表的方案

      1.1  使用Redis的Hash类型去保存关系型数据库的User表

       1.2 redis的Hash的key为"SYS_USER_TABLE_SEX_MAN",field:userid   value:json 数据


2、利用Redis的Set来保存满足一类条件的User用户的id信息。例如,性别为女,年龄大于25岁等条件。


3、Java实现的具体代码如下:

      3.1  Json相关的工具类   

public class GsonUtil {  public static String object2Json(Object object) {  Gson gson = new Gson();  return gson.toJson(object);  }  public static <T> T json2Object(String json, Class<T> clazz) {  Gson gson = new Gson();  return gson.fromJson(json, clazz);  }  
}  

      3.2  User实体类     

public class User {  private int id;  private String name;  private String sex;  private int age;  public User() {  }  public int getAge() {  return age;  }  public void setAge(int age) {  this.age = age;  }  public int getId() {  return id;  }  public void setId(int 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;  }  @Override  public String toString() {  return "User [id=" + id + ", name=" + name + ", sex=" + sex + ", age="  + age + "]";  }  }  

      3.3   Redis实现类似SQL的多条件查询测试

public class RedisSQL {  public static void main(String[] args) {  // 将User表的内容放到Redis里面,下面为key  // 将User表的内容field:id value: json 保存一个记录  final String SYS_USER_TABLE = "SYS_USER_TABLE";  // 用于保存性别为男性的User用户的Redis的Set  final String SYS_USER_TABLE_SEX_MAN = "SYS_USER_TABLE_SEX_MAN";  // 用于保存性别为女性的用户的Redis的Set  final String SYS_USER_TABLE_SEX_FEMAN = "SYS_USER_TABLE_SEX_FEMAN";  // 用于保存age为25岁的用户的Redis的Set  final String SYS_USER_TABLE_AGE_25 = "SYS_USER_TABLE_AGE_25";  // 获取数据库的连接  Jedis jedis = new Jedis("192.168.2.116", 6379);  // 模拟数据库的表User的数据  List<User> users = new ArrayList<User>();  for (int i = 0; i < 5; i++) {  User user = new User();  user.setId(i);  user.setName("zhang" + i);  user.setSex("man");  user.setAge(20 + i);  users.add(user);  }  for (int i = 5; i < 10; i++) {  User user = new User();  user.setId(i);  user.setName("zhang" + i);  user.setSex("feman");  user.setAge(20 + i);  users.add(user);  }  // 通过Hash存放  Map<String, String> map = new HashMap<String, String>();  for (int i = 0; i < users.size(); i++) {  map.put(users.get(i).getId() + "",  GsonUtil.object2Json(users.get(i)));  // 将性别为男性的User用户  // 加入到Redis中key为SYS_USER_TABLE_SEX_MAN的Set集合里面  // 只需要加入User用户的id就可以了  if ("man".equals(users.get(i).getSex())) {  jedis.sadd(SYS_USER_TABLE_SEX_MAN, users.get(i).getId() + "");  }  // 将性别为男性的User用户  // 加入到Redis中key为SYS_USER_TABLE_SEX_MAN的Set集合里面  // 只需要加入User用户的id就可以了  if ("feman".equals(users.get(i).getSex())) {  jedis.sadd(SYS_USER_TABLE_SEX_FEMAN, users.get(i).getId() + "");  }  // 如果有age,birthday等,使用类似的方法  // 在Redis里面,新建立一个Set,用来保存符合条件的相关User的id信息  if ("25".equals(users.get(i).getAge() + "")) {  jedis.sadd(SYS_USER_TABLE_AGE_25, users.get(i).getId() + "");  }  }  // 查看转换结果  // Set<String> keySet = map.keySet();  // for (String key : keySet) {  // System.out.println(map.get(key));  // }  // 保存User表的数据到Redis中  // key为SYS_USER_TABLE  // 每条记录一 feild :id value:json 的形式保存  jedis.hmset(SYS_USER_TABLE, map);  // ===============================  // 模拟SQL的where多条件查询  // 查询年龄为25岁,性别为女的user用户  Set<String> sinter = jedis.sinter(SYS_USER_TABLE_SEX_FEMAN);  for (String key : sinter) {  // 根据id到Redis中的SYS_USER_TABLE,查询符合条件的user  String hkey = jedis.hget(SYS_USER_TABLE, key);  System.out.println(hkey);  // 将查询到的json数据,转换为User用户  User user = GsonUtil.json2Object(hkey, User.class);  System.out.println(user);  }  // 查询年龄为25岁,性别为女的user用户  Set<String> sinter2 = jedis.sinter(SYS_USER_TABLE_SEX_FEMAN,  SYS_USER_TABLE_AGE_25);  for (String key : sinter2) {  // 根据id到Redis中的SYS_USER_TABLE,查询符合条件的user  String hkey = jedis.hget(SYS_USER_TABLE, key);  System.out.println(hkey);  // 将查询到的json数据,转换为User用户  User user = GsonUtil.json2Object(hkey, User.class);  System.out.println(user);  }  }  
}  

这篇关于redis增大查询速度(项目中实际应用举例)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1089606

相关文章

MySQL中between and的基本用法、范围查询示例详解

《MySQL中betweenand的基本用法、范围查询示例详解》BETWEENAND操作符在MySQL中用于选择在两个值之间的数据,包括边界值,它支持数值和日期类型,示例展示了如何使用BETWEEN... 目录一、between and语法二、使用示例2.1、betwphpeen and数值查询2.2、be

JAVA项目swing转javafx语法规则以及示例代码

《JAVA项目swing转javafx语法规则以及示例代码》:本文主要介绍JAVA项目swing转javafx语法规则以及示例代码的相关资料,文中详细讲解了主类继承、窗口创建、布局管理、控件替换、... 目录最常用的“一行换一行”速查表(直接全局替换)实际转换示例(JFramejs → JavaFX)迁移建

JavaWeb项目创建、部署、连接数据库保姆级教程(tomcat)

《JavaWeb项目创建、部署、连接数据库保姆级教程(tomcat)》:本文主要介绍如何在IntelliJIDEA2020.1中创建和部署一个JavaWeb项目,包括创建项目、配置Tomcat服务... 目录简介:一、创建项目二、tomcat部署1、将tomcat解压在一个自己找得到路径2、在idea中添加

解决idea启动项目报错java: OutOfMemoryError: insufficient memory

《解决idea启动项目报错java:OutOfMemoryError:insufficientmemory》:本文主要介绍解决idea启动项目报错java:OutOfMemoryError... 目录原因:解决:总结 原因:在Java中遇到OutOfMemoryError: insufficient me

python项目环境切换的几种实现方式

《python项目环境切换的几种实现方式》本文主要介绍了python项目环境切换的几种实现方式,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一... 目录1. 如何在不同python项目中,安装不同的依赖2. 如何切换到不同项目的工作空间3.创建项目

SpringBoot项目整合Netty启动失败的常见错误总结

《SpringBoot项目整合Netty启动失败的常见错误总结》本文总结了SpringBoot集成Netty时常见的8类问题及解决方案,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参... 目录一、端口冲突问题1. Tomcat与Netty端口冲突二、主线程被阻塞问题1. Netty启动阻

python项目打包成docker容器镜像的两种方法实现

《python项目打包成docker容器镜像的两种方法实现》本文介绍两种将Python项目打包为Docker镜像的方法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要... 目录简单版:(一次成功,后续下载对应的软件依赖)第一步:肯定是构建dockerfile,如下:第二步

MyBatis-Plus使用动态表名分表查询的实现

《MyBatis-Plus使用动态表名分表查询的实现》本文主要介绍了MyBatis-Plus使用动态表名分表查询,主要是动态修改表名的几种常见场景,文中通过示例代码介绍的非常详细,对大家的学习或者工作... 目录1. 引入依赖2. myBATis-plus配置3. TenantContext 类:租户上下文

Python + Streamlit项目部署方案超详细教程(非Docker版)

《Python+Streamlit项目部署方案超详细教程(非Docker版)》Streamlit是一款强大的Python框架,专为机器学习及数据可视化打造,:本文主要介绍Python+St... 目录一、针对 Alibaba Cloud linux/Centos 系统的完整部署方案1. 服务器基础配置(阿里

MySQL基本表查询操作汇总之单表查询+多表操作大全

《MySQL基本表查询操作汇总之单表查询+多表操作大全》本文全面介绍了MySQL单表查询与多表操作的关键技术,包括基本语法、高级查询、表别名使用、多表连接及子查询等,并提供了丰富的实例,感兴趣的朋友跟... 目录一、单表查询整合(一)通用模版展示(二)举例说明(三)注意事项(四)Mapper简单举例简单查询