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

相关文章

房产证 不动产查询

陕西政务服务网(便民服务)陕西政务服务网(手机版?更直观)不动产权证书|不动产登记证明(电子证照)商品房合同备案查询权利人查询

用Microsoft.Extensions.Hosting 管理WPF项目.

首先引入必要的包: <ItemGroup><PackageReference Include="CommunityToolkit.Mvvm" Version="8.2.2" /><PackageReference Include="Microsoft.Extensions.Hosting" Version="8.0.0" /><PackageReference Include="Serilog

eclipse运行springboot项目,找不到主类

解决办法尝试了很多种,下载sts压缩包行不通。最后解决办法如图: help--->Eclipse Marketplace--->Popular--->找到Spring Tools 3---->Installed。

Windows/macOS/Linux 安装 Redis 和 Redis Desktop Manager 可视化工具

本文所有安装都在macOS High Sierra 10.13.4进行,Windows安装相对容易些,Linux安装与macOS类似,文中会做区分讲解 1. Redis安装 1.下载Redis https://redis.io/download 把下载的源码更名为redis-4.0.9-source,我喜欢跟maven、Tomcat放在一起,就放到/Users/zhan/Documents

通过高德api查询所有店铺地址信息

通过高德api查询所有店铺地址电话信息 需求:通过高德api查询所有店铺地址信息需求分析具体实现1、申请高德appkey2、下载types city 字典值3、具体代码调用 需求:通过高德api查询所有店铺地址信息 需求分析 查询现有高德api发现现有接口关键字搜索API服务地址: https://developer.amap.com/api/webservice/gui

亮相WOT全球技术创新大会,揭秘火山引擎边缘容器技术在泛CDN场景的应用与实践

2024年6月21日-22日,51CTO“WOT全球技术创新大会2024”在北京举办。火山引擎边缘计算架构师李志明受邀参与,以“边缘容器技术在泛CDN场景的应用和实践”为主题,与多位行业资深专家,共同探讨泛CDN行业技术架构以及云原生与边缘计算的发展和展望。 火山引擎边缘计算架构师李志明表示:为更好地解决传统泛CDN类业务运行中的问题,火山引擎边缘容器团队参考行业做法,结合实践经验,打造火山

vue项目集成CanvasEditor实现Word在线编辑器

CanvasEditor实现Word在线编辑器 官网文档:https://hufe.club/canvas-editor-docs/guide/schema.html 源码地址:https://github.com/Hufe921/canvas-editor 前提声明: 由于CanvasEditor目前不支持vue、react 等框架开箱即用版,所以需要我们去Git下载源码,拿到其中两个主

React+TS前台项目实战(十七)-- 全局常用组件Dropdown封装

文章目录 前言Dropdown组件1. 功能分析2. 代码+详细注释3. 使用方式4. 效果展示 总结 前言 今天这篇主要讲全局Dropdown组件封装,可根据UI设计师要求自定义修改。 Dropdown组件 1. 功能分析 (1)通过position属性,可以控制下拉选项的位置 (2)通过传入width属性, 可以自定义下拉选项的宽度 (3)通过传入classN

自制的浏览器主页,可以是最简单的桌面应用,可以把它当成备忘录桌面应用

自制的浏览器主页,可以是最简单的桌面应用,可以把它当成备忘录桌面应用。如果你看不懂,请留言。 完整代码: <!DOCTYPE html><html lang="zh-CN"><head><meta charset="UTF-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><ti

Python应用开发——30天学习Streamlit Python包进行APP的构建(9)

st.area_chart 显示区域图。 这是围绕 st.altair_chart 的语法糖。主要区别在于该命令使用数据自身的列和指数来计算图表的 Altair 规格。因此,在许多 "只需绘制此图 "的情况下,该命令更易于使用,但可定制性较差。 如果 st.area_chart 无法正确猜测数据规格,请尝试使用 st.altair_chart 指定所需的图表。 Function signa