在现实生活中,当很多人去访问一个数据的时候,Mysql会很慢,甚至会挂掉,如果这里之间存在一个缓存的话,直接从内存中查询数据将会快很多。

这里就去模拟将redis看作是一个缓存,因为redis就是基于内存的数据库。

需要考虑的问题:

  1、客户端发起请求的时候,先去缓存中查询。

  2、如何设计redis中的Key-Value中的value的类型。

  3、怎么将将它看作缓存?设定过期时间,在缓存中查询到数据的情况下,将过期时间重置。

  4、如果在缓存中查询不到的情况下,去数据库中查询

  5、再将数据库查询到数据,添加到缓存中,并设定过期时间。

jedis.expire(key,60);   设置过期时间

package com.wyh.redis;

import org.junit.After;
import org.junit.Before;
import org.junit.Test;
import redis.clients.jedis.Jedis; import java.sql.*; /**
* 模拟redis是缓存
*
*
*/
public class RedisAsCache {
private Connection conn;
private Jedis jedis;
private weibo weibo; @Before
public void Cli(){ try {
//获取到数据库的连接信息
Class.forName("com.mysql.jdbc.Driver");
conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/test",
"root", "root"); //获取到redis的连接
jedis = new Jedis("master", 6379); System.out.println("成功连接到数据库。。"+conn);
System.out.println("成功连接到redis。。。"+jedis); } catch (ClassNotFoundException e) {
e.printStackTrace();
} catch (SQLException e) {
e.printStackTrace();
}
} /**
* 读取数据
* 1、先去缓存(redis)中读取
* 2、若缓存中存在数据(redis),就直接返回数据,并更新过期时间
* 3、若缓存(redis)中没有,就去数据库(Mysql)中读取数据
* 4、若查询到数据,将结果缓存到redis中,并设置过期时间
* 5、返回结果
*/
@Test
public void readData(){
long start = System.currentTimeMillis(); int id = 2;
//先读取缓存 String tableName = "weibo:"; String key = tableName+id; String result = jedis.get(key); if(result!=null){
//更新过期时间
jedis.expire(key,60);
weibo = new weibo(id, result); System.out.println("缓存中查询到热门微博: "+weibo.getContext());
}else{ String sql = "select * from weibo where id=?";
try {
PreparedStatement ps = conn.prepareStatement(sql);
ps.setInt(1,id); ResultSet resultSet = ps.executeQuery(); if(resultSet.next()){
int id1 = resultSet.getInt("id");
String context = resultSet.getString("context"); weibo = new weibo(id1,context);
System.out.println("数据库查询到热门微博: "+weibo.getContext());
} jedis.set(key,weibo.getContext());
jedis.expire(key,60); } catch (SQLException e) {
e.printStackTrace();
}
} long end = System.currentTimeMillis();
System.out.println(end-start); } @After
public void close(){
if(jedis!=null){
jedis.close();
}
if(conn!=null){
try {
conn.close();
} catch (SQLException e) {
e.printStackTrace();
}
} } }
 

大数据之路Week10_day07 (JavaAPI 操作Redis 模拟将redis当作缓存,从Mysql数据库中查询数据)的更多相关文章

  1. MongoDB数据库中查询数据(下)

    MongoDB数据库中查询数据(下) 在find中,options参数值为一个对象,用来设置查询数据时使用的选项,下面我们来对该参数值对象中可以使用的属性进行介绍: 1. fields; 该属性值为一 ...

  2. 在MongoDB数据库中查询数据(上)

    在MongoDB数据库中查询数据(上) 在MongoDB数据库中,可以使用Collection对象的find方法从一个集合中查询多个数据文档,find方法使用方法如下所示: collection.fi ...

  3. flask再学习-思考之怎么从数据库中查询数据在页面展示!

    看别人视频觉得很简单,要自己做蒙蔽了!这样子.NO! 1. 流程: 首先要有和数据库连接的驱动!一般有PYMySQL mysqlclient 等 使用扩展Flask-SQLAlchemy 获得orm对 ...

  4. 使用JDBC从数据库中查询数据的方法

    * ResultSet 结果集:封装了使用JDBC 进行查询的结果 * 1. 调用Statement 对象的 executeQuery(sql) 方法可以得到结果集 * 2. ResultSet 返回 ...

  5. mysql数据库中插入数据INSERT INTO SET的优势

    往mysql数据库中插入数据.以前常用 INSERT INTO 表名 (列名1,列名2…) VALUES(列值1,列值2); 如果在PHP程序中,就会写成如下示例(往商品库里增加商品) $sql = ...

  6. 使用sqoop将MySQL数据库中的数据导入Hbase

    使用sqoop将MySQL数据库中的数据导入Hbase 前提:安装好 sqoop.hbase. 下载jbdc驱动:mysql-connector-java-5.1.10.jar 将 mysql-con ...

  7. python制作简单excel统计报表3之将mysql数据库中的数据导入excel模板并生成统计图

    python制作简单excel统计报表3之将mysql数据库中的数据导入excel模板并生成统计图 # coding=utf-8 from openpyxl import load_workbook ...

  8. JDBC Java 程序从 MySQL 数据库中读取数据,并备份到 xml 文档中

    MySQL 版本:Server version: 5.7.17-log MySQL Community Server (GPL) 相关内容:JDBC Java 程序从 MySQL 数据库中读取数据,并 ...

  9. 使用grabit分析mysql数据库中的数据血缘关系

    使用grabit分析mysql数据库中的数据血缘关系 Grabit 是一个辅助工具,用于从数据库.GitHub 等修订系统.bitbucket 和文件系统等各种来源收集 SQL 脚本和存储过程,然后将 ...

  10. DBCC大全集之(适用版本MS SQLServer 2008 R2)----DBCC SHRINKDATABASE收缩指定数据库中的数据文件和日志文件的大小

    收缩指定数据库中的数据文件和日志文件的大小.  Transact-SQL 语法约定 语法 DBCC SHRINKDATABASE ( database_name | database_id | 0 [ ...

随机推荐

  1. mysql忘记密码的终极解决方案(docker-compose)

    MYSQL8的安全性能有所提高,装好后,各种不适应,需要各种调试. 1. 首先,root密码忘记或是更改,操作步骤: vi mysql/config/my.cnf 在[mysqld]的段中加上一句:s ...

  2. 鸿蒙(HarmonyOS)原生AI能力之文本识别

    鸿蒙(HarmonyOS)原生AI能力之文本识别 原生智能介绍 在之前开发中,很多场景我们是通过调用云端的智能能力进行开发.例如文本识别.人脸识别等. 原生即指将一些能力直接集成在本地鸿蒙系统中,通过 ...

  3. 【C#】【平时练习】将左边列表框(List)的内容(月份)添加到右边列表框。最终右侧显示的内容(月份)要保持一定顺序

    Aspx - 点击查看代码 <%@ Page Language="C#" AutoEventWireup="true" CodeBehind=" ...

  4. SpringBoot重点详解--使用Actuator进行健康监控

    目录 添加依赖与配置 Actuator监控项 Actuator监控管理 打开或关闭 端口与地址 Actuator是Springboot提供的用来对应用系统进行自省和监控的功能模块,借助于Actuato ...

  5. Unity 3D简单使用C#脚本,脚本的生命周期

    Unity 3D简单使用 新建项目->层级里右键->创建空对象改名Test 项目里右键创建C#脚本Test 双击脚本Test(所有脚本都会继承MonoBehaviour类),在Start( ...

  6. Qt/C++中英输入法/嵌入式输入法/小数字面板/简繁切换/特殊字符/支持Qt456

    一.前言 在嵌入式板子上由于没有系统层面的输入法支持,所以都绕不开一个问题,那就是在需要输入的UI软件中,必须提供一个输入法来进行输入,大概从Qt5.7开始官方提供了输入法的源码,作为插件的形式加入到 ...

  7. Qt编写可视化大屏电子看板系统20-横向分组图

    一.前言 横向分组图是柱状分组图的横向展示,有了横向柱状图加上分组图的绘制经验,这个做起来就比较简单了,横向的设置规则按照横向柱状图来,分组的规则按照柱状分组图的算法来,在横向的柱子中要绘制对应的值, ...

  8. Qt音视频开发41-人脸识别嵌入式

    一.前言 大概几年前搞过一套嵌入式linux上的人脸识别程序,当然人脸识别的核心算法并不是自己开发的,关于人脸识别算法这一块,虽然有众多的开源库可以用,甚至还可以用opencv搞算法训练深度学习之类的 ...

  9. Qt 中实现系统主题感知

    [写在前面] 在现代桌面应用程序开发中,系统主题感知是一项重要的功能,它使得应用程序能够根据用户的系统主题设置(如深色模式或浅色模式)自动调整其外观. Qt 作为一个跨平台的C++图形用户界面应用程序 ...

  10. yarn : 无法加载文件 C:\Users\duany\AppData\Roaming\npm\yarn.ps1,因为在此系统上禁止运行脚本

    在win10 下安装yarn后,在编辑器中检查yarn的安装的时候会出现: 解决方法 1:搜索powershell,以管理员方式运行powershell2:使用命令更改计算机的执行策略 执行: set ...