在现实生活中,当很多人去访问一个数据的时候,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. openEuler欧拉设置git pull免密

    使用git config命令在本地全局设置用户名和邮箱 git config --global user.name "username":全局添加用户名 git config -- ...

  2. MeteoInfo-Java解析与绘图教程(九)_JAVA解析天气雷达基数据

    MeteoInfo在这两年中也更新了很多,其中对新一代标准格式多普勒天气雷达基数据的解析以及绘制是对Java开发者最好的拓展,其中Java可以做到基本要素绘图,例如基本反射率,基本速度等,还有二次产品 ...

  3. R数据分析:潜在转化分析LTA的做法和解释(一)

    之前给大家写了很多潜在类别分析的教程Mplus教程:如何做潜在类别分析LCA R数据分析:用R语言做潜类别分析LCA Mplus数据分析:潜在类别分析(LCA)流程(详细版) R数据分析:再写潜在类别 ...

  4. 中电金信通过KCSP认证 云原生能力获权威认可

    ​ 中电金信通过KCSP(Kubernetes Certified Service Provider)认证,正式成为CNCF(云原生计算基金会)官方认证的 Kubernetes 服务提供商. ​ Ku ...

  5. 解决docker 容器设置中文语言包出现的问题_docker

    https://www.anquanclub.cn/5821.html 这篇文章主要介绍了解决docker 容器设置中文语言包出现的问题,具有很好的参考价值,希望对大家有所帮助.一起跟随小编过来看看吧 ...

  6. Qt编写地图综合应用22-动态轨迹

    一.前言 上一篇文章写道拿到路径规划的轨迹点坐标集合,并且已经可以通过调用addPolyline绘制线段的形式将轨迹点绘制,接下来就是要如何动态的绘制这些轨迹点,最简单的方法就是开个定时器挨个取出下一 ...

  7. VS2010/MFC 获取当前程序路径的方法

    第一种方法 DWORD GetCurrentDirectory( DWORD nBufferLength, // size, in characters, of directory buffer LP ...

  8. Android RNDIS gadget Windows免驱修改方案

    过程简单粗暴,拿到竞品的设备,然后使用UsbTreeView查看设备的相关描述符. 对比发现接口抽象描述符和接口描述符不一致,直接修改Linux RNDIS gadget 驱动,将驱动中有关的两个描述 ...

  9. HTTP协议超级详解【转载】

    HTTP协议简介 超文本传输协议(英文:HyperText Transfer Protocol,缩写:HTTP)是一种用于分布式.协作式和超媒体信息系统的应用层协议.HTTP是万维网的数据通信的基础. ...

  10. Solution -「WC 2014」「洛谷 P3920」紫荆花之恋

    \(\mathscr{Description}\)   Link.   维护一棵树,初始时树空.接下来 \(n\) 次操作,每次操作加入一片叶子 \(u\),\(u\) 到其邻接点的边权为 \(w\) ...