在现实生活中,当很多人去访问一个数据的时候,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. 理解 ASP.NET Core: Host

    dotnet core 非常好用,代码也及其精炼,但是,你真的搞懂了每一行代码背后的含义了吗? 本文希望能够深入浅出地梳理一下它的脉络,把它从神秘变成水晶一般透明. 本文关注于分析 Pragram.c ...

  2. 【金TECH频道】汇聚多元化超级算力,看见更好的“源启”

    越来越多的金融机构开始利用大数据和AI技术,提升信贷业务的效率,利用隐私计算打造开放式金融,让客户随时随地获得金融服务:气象领域,高精度计算让我们能准确地预测恶劣的天气,医疗大数据让部分癌症的治愈成为 ...

  3. django介绍及基本使用

    目录 一.python主流web框架 二.django简介 1.版本问题 2.运行django注意事项 三.django基本使用 1.下载模块 2.验证 3.常见命令 4.pycharm自动创建dja ...

  4. 对DenseTensor进行Transpose

    ML.NET 是微软推出的为. NET 平台设计的深度学习库,通过这个东西(ModelBuilder)可以自己构建模型,并用于后来的推理与数据处理.虽然设计是很好的,但是由于现在的 AI 发展基本上都 ...

  5. Qt/C++加载不同的地图控件/地图类型/缩放标尺/缩略图/比例尺/实时路况/全景视图等

    一.前言说明 在展示地图的时候,有些常规的操作,比如调整地图的缩放级别,切换到卫星图等,希望能够在地图上直接操作实现,于是就有了一堆地图控件,可以根据自己的需求动态的添加和删除,这样就更直接更快捷,而 ...

  6. Qt编写物联网管理平台45-采集数据转发

    一.前言 本系统严格意义上说是一个直连硬件的客户端软件,下面接的modbus协议的设备直接通过网络或者串口和软件通信,软件负责解析数据和存储记录.有时候客户想要领导办公室或者分管这一块的部门经理办公室 ...

  7. Qt编写的项目作品28-视频监控显示安卓版

    一.功能特点 1.1 基础功能 支持各种音频视频文件格式,比如mp3.wav.mp4.asf.rm.rmvb.mkv等. 支持各种视频流格式,比如rtp.rtsp.rtmp.http等. 本地音视频文 ...

  8. 百度统一socket长连接组件从0到1的技术实践

    本文由百度消息中台团队分享,引用自百度Geek说,原题"百度iOS端长连接组件建设及应用实践",为了帮助理解,本文有修订和改动. 1.引言 在过去的十年里,移动端互联网技术飞速发展 ...

  9. IM开发干货分享:浅谈IM系统中离线消息、历史消息的最佳实践

    本文由融云技术团队原创分享,原题"IM 消息数据存储结构设计",内容有修订. 1.引言 在如今的移动互联网时代,IM类产品已是我们生活中不可或缺的组成部分.像微信.钉钉.QQ等是典 ...

  10. SpringBoot进阶教程(八十四)spring-retry

    在日常的一些场景中, 很多需要进行重试的操作.而spring-retry是spring提供的一个基于spring的重试框架,某些场景需要对一些异常情况下的方法进行重试就会用到spring-retry. ...