大数据之路Week10_day07 (JavaAPI 操作Redis 模拟将redis当作缓存,从Mysql数据库中查询数据)
在现实生活中,当很多人去访问一个数据的时候,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数据库中查询数据)的更多相关文章
- MongoDB数据库中查询数据(下)
MongoDB数据库中查询数据(下) 在find中,options参数值为一个对象,用来设置查询数据时使用的选项,下面我们来对该参数值对象中可以使用的属性进行介绍: 1. fields; 该属性值为一 ...
- 在MongoDB数据库中查询数据(上)
在MongoDB数据库中查询数据(上) 在MongoDB数据库中,可以使用Collection对象的find方法从一个集合中查询多个数据文档,find方法使用方法如下所示: collection.fi ...
- flask再学习-思考之怎么从数据库中查询数据在页面展示!
看别人视频觉得很简单,要自己做蒙蔽了!这样子.NO! 1. 流程: 首先要有和数据库连接的驱动!一般有PYMySQL mysqlclient 等 使用扩展Flask-SQLAlchemy 获得orm对 ...
- 使用JDBC从数据库中查询数据的方法
* ResultSet 结果集:封装了使用JDBC 进行查询的结果 * 1. 调用Statement 对象的 executeQuery(sql) 方法可以得到结果集 * 2. ResultSet 返回 ...
- mysql数据库中插入数据INSERT INTO SET的优势
往mysql数据库中插入数据.以前常用 INSERT INTO 表名 (列名1,列名2…) VALUES(列值1,列值2); 如果在PHP程序中,就会写成如下示例(往商品库里增加商品) $sql = ...
- 使用sqoop将MySQL数据库中的数据导入Hbase
使用sqoop将MySQL数据库中的数据导入Hbase 前提:安装好 sqoop.hbase. 下载jbdc驱动:mysql-connector-java-5.1.10.jar 将 mysql-con ...
- python制作简单excel统计报表3之将mysql数据库中的数据导入excel模板并生成统计图
python制作简单excel统计报表3之将mysql数据库中的数据导入excel模板并生成统计图 # coding=utf-8 from openpyxl import load_workbook ...
- JDBC Java 程序从 MySQL 数据库中读取数据,并备份到 xml 文档中
MySQL 版本:Server version: 5.7.17-log MySQL Community Server (GPL) 相关内容:JDBC Java 程序从 MySQL 数据库中读取数据,并 ...
- 使用grabit分析mysql数据库中的数据血缘关系
使用grabit分析mysql数据库中的数据血缘关系 Grabit 是一个辅助工具,用于从数据库.GitHub 等修订系统.bitbucket 和文件系统等各种来源收集 SQL 脚本和存储过程,然后将 ...
- DBCC大全集之(适用版本MS SQLServer 2008 R2)----DBCC SHRINKDATABASE收缩指定数据库中的数据文件和日志文件的大小
收缩指定数据库中的数据文件和日志文件的大小. Transact-SQL 语法约定 语法 DBCC SHRINKDATABASE ( database_name | database_id | 0 [ ...
随机推荐
- .NET Aspire 外部参数 (External parameters)
.NET Aspire 外部参数 (External parameters) https://learn.microsoft.com/en-us/dotnet/aspire/fundamentals/ ...
- 【MyBatis】学习笔记11:解决字段名和属性的映射关系
[Mybatis]学习笔记01:连接数据库,实现增删改 [Mybatis]学习笔记02:实现简单的查 [MyBatis]学习笔记03:配置文件进一步解读(非常重要) [MyBatis]学习笔记04:配 ...
- sudo: source: command not found
在Ubuntu上配置了jdk(非root用户),要使它的配置生效,在执行 sudo source /etc/profile 的时候提示 ,sudo: source: command not found ...
- Qt/C++开发经验小技巧306-310
远程过很多人电脑远程分析问题,发现一个通病,比如明明修改了某个数据库或者配置文件,结果运行程序一看,还是旧的数据,死活都不行,查了半天程序,始终找不到问题所在.最终查到原来是程序读取的文件根本不是修改 ...
- Qt编写地图综合应用43-点聚合
一.前言 点聚合的出现就是为了减少一个可视区域内,密密麻麻绘制的太多的标注点.在地图上查询结果通常以标记点的形式展现,但是如果标记点较多,不仅会大大增加客户端的渲染时间,让客户端变得很卡,而且会让人产 ...
- [转]IRIG-B码授时工作原理
在授时设备中有一种是B码授时的,但是大部分人不太清楚何为B码授时?这种类型的授时工作原理是怎么样? 首先我们要知道什么是B码,然后再介绍它的授时工作原理,B码是一种电力术语,它是IRIG-B码的通俗叫 ...
- 串口的Hex/AscII发送与显示
首先,底层的数据传输都是字节流,所以不管选择什么方式,都会被分解为一个一个的字节. 1.选择Hex发送就代表你要发送的内容是纯数字,由程序完成String到Int再到Byte的转化.所以你应该保证每个 ...
- nvm的安装与使用,多个node版本同时使用
nvm的介绍 nvm全英文也叫node.js version management,是一个nodejs的版本管理工具.nvm和npm都是node.js版本管理工具,为了解决node.js各种版本存在不 ...
- CDS标准视图:维护包数据 I_MaintenancePackageData
视图名称:维护包数据 I_MaintenancePackageData 视图类型:基础 视图代码: 点击查看代码 @AbapCatalog.sqlViewName: 'IMAINTPCKGDATA' ...
- MySQL事务ACID-隔离级别-锁介绍
⑴ 原子性(Atomicity) 原子性是指事务包含的所有操作要么全部成功,要么全部失败回滚,这和前面两篇博客介绍事务的功能是一样的概念,因此事务的操作如果成功就必须要完全应用到数据库,如果操作失败则 ...