文章目录

  • 一、缓存
  • 二、redis
  • 三、hashmap模拟缓存工作原理
    • 1)首先查看数据库中存储的数据格式
    • 2)连接数据库,利用spring在浏览器中显示
    • 3)测试,运行spring接口

一、缓存

  • 当用户访问量很大时,需要多次访问数据库,为了提高性能,需要引入缓存cache

  • 缓存是指可以进行高速数据交换的存储器,它先于内存与CPU交换数据,因此速率很快。

  • 缓存的工作原理是当CPU要读取一个数据时,首先从CPU缓存中查找,找到就立即读取并送给CPU处理;没有找到,就从速率相对较慢的内存中读取并送给CPU处理,同时把这个数据所在的数据块调入缓存中,可以使得以后对整块数据的读取都从缓存中进行,不必再调用内存。

二、redis

  • redis是现在主流的缓存工具了,因为使用简单、高效且对服务器要求较小,用于大数据量下的缓存。
  • redis是内存数据库,不能执行sql语言
  • 相当于一个远程的hasmap
  • 采用的是C语言编写

三、hashmap模拟缓存工作原理

此处为了方便,连接数据库没有采用分层架构去完善,简单演示,了解原理即可

1)首先查看数据库中存储的数据格式

2)连接数据库,利用spring在浏览器中显示

定义一个Student类,用于将数据库的每条记录,创建一个对象
Student

public class Studnet {private String id;private String name;private Integer age;private String gender;private String clazz;public Studnet(String id, String name, Integer age, String gender, String clazz) {this.id = id;this.name = name;this.age = age;this.gender = gender;this.clazz = clazz;}public Studnet() {}public String getId() {return id;}public void setId(String id) {this.id = id;}public String getName() {return name;}public void setName(String name) {this.name = name;}public Integer getAge() {return age;}public void setAge(Integer age) {this.age = age;}public String getGender() {return gender;}public void setGender(String gender) {this.gender = gender;}public String getClazz() {return clazz;}public void setClazz(String clazz) {this.clazz = clazz;}
}

Studentquery

import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.util.HashMap;
//http://localhost:8080/studentquery?id=1500100002185&key=123
@RestController
public class Studentquery {/*** 定义一个hashmap用于缓存* 键值为ID,值为学生对象*/HashMap<String,Studnet> cache =new HashMap<String,Studnet>();/***由于是spring项目,这里只要添加注解供扫描即可* 两个参数,一个是要查询的ID,另一个是为了数据安全,需加上密码才能访问* key就相当于访问该方法的钥匙,这里key为123*/@GetMapping("/studentquery")public Studnet studentquery(String id,String key) throws Exception {if(id.trim().isEmpty()|!key.equals("123")){return null;}/*** 现在缓存中查找,如果有学生信息,直接返回,如果没有接着在数据库中查找*/Studnet stu=cache.get(id);if(stu!=null){return stu;}/**加载驱动* 建立连接* 查询语句*/Class.forName("com.mysql.jdbc.Driver");Connection conn = DriverManager.getConnection("jdbc:mysql://master:3306/user", "root", "123456");PreparedStatement ps = conn.prepareStatement("select * from student where id=?");ps.setString(1,id);ResultSet rs = ps.executeQuery();if(rs.next()){String name = rs.getString("name");Integer age = rs.getInt("age");String gender = rs.getString("gender");String clazz = rs.getString("clazz");stu=new Studnet(id,name,age,gender,clazz);//查询到加入到缓存,便于后期查询cache.put(id,stu);//由于是spring项目,会自动把student对象,转化为json格式return stu;}return null;}
}

3)测试,运行spring接口

一旦运行就不会停止,直接在浏览器中给值刷新

在浏览器中输入网址查看
在浏览器中找到更多工具,开发者工具,观察加入缓存后运行时间的变化
第一次查找,cache中没有数据,需建立连接,在数据库中查询

第二次查找,直接在浏览器中更改学生的学号,由于第一次运行后,数据库的连接已经建立,虽然缓存中也没有该学生,但是相比于第一次,没有了建立连接的时间,时间也会减少一点

第三次查找,查找之前第一次查找的那个人,此时直接去cache缓存中查找,比在数据库中查找,要更快一点

java
java入门基础学习(一)
java入门基础学习(二)
java入门基础学习(三)
java入门基础学习(四)
java入门基础学习(五)
java入门基础学习(六)
java入门基础学习(七)
java入门基础学习(八)
java入门基础学习(九)
java入门基础学习(十)
java入门基础学习(十一)
java入门基础学习(十二)
java入门基础学习(十三)
java入门基础学习(十四)Maven Git
java总结,题目+笔记
java进阶之常见对象(一)
java进阶之常见对象(二)
java进阶之冒泡排序
java进阶之选择排序
java进阶之面向对象(封装)
java进阶之面向对象(代码块、继承)
java进阶之面向对象(多态、抽象、接口)
java进阶之匿名内部类、访问修饰符、包
java进阶之io流(字节流,字符流)
java应用一(反射的应用)
java应用二(配置文件、工具类)
java应用三(数据库索引、spring)
Linux
Linux基础一
Linux基础二
Mysql
mysql一
mysql二
mysql三
mysql四
java连接数据库
redis
redis一(缓存,redis简介)
redis二(在虚拟机中的安装,桌面插件)

Redis一(缓存的工作原理、redis的介绍、hashmap缓存)相关推荐

  1. Redis主从复制下的工作原理

    Redis主从复制下的工作原理 Redis主从复制的配置十分简单,它可以使从服务器是主服务器的完全拷贝.需要清楚Redis主从复制的几点重要内容: 1)Redis使用异步复制.但从Redis 2.8开 ...

  2. Web缓存的工作原理

    Web缓存的工作原理 所有的缓存都是基于一套规则来帮助他们决定什么时候使用缓存中的副本提供服务(假设有副本可用的情况下,未被销毁回收或者未被删除修改).这些规则有的在协议中有定义(如HTTP协议1.0 ...

  3. Nginx工作原理及相关介绍

    Nginx工作原理及相关介绍 一.Nginx工作原理与模块介绍 1.Nginx基本工作原理 NGINX以高性能的负载均衡器,缓存,和web服务器闻名.Nginx由内核和模块组成,其中,内核的设计非常微 ...

  4. ARKit从入门到精通(2)-ARKit工作原理及流程介绍

    转载请注明出处:ARKit从入门到精通(2)-ARKit工作原理及流程介绍 1.1-写在前面的话 1.2-ARKit与SceneKit的关系 1.3-ARKit工作原理 1.3.1-ARSCNView ...

  5. 内存的工作原理和时序介绍

    内存的工作原理及时序介绍 内存是PC配件中结构最简单的,但在BIOS中却是最难调的,很多玩家超频都卡在内存上.并且,内存的原理.结构与时序多年不会改变,无论将来内存技术如何进步,相信这篇文章的存在价值 ...

  6. 关于协议转换器的分类以及工作原理的详细介绍

    现如今,随着互联网的广泛应用,我们国内的网民也是突破了8.29亿,相信,大家对于网络这块是非常的熟悉了,它是一种虚拟的东西,但是它几乎存在于我们生活的各个角落,在很大程度的让我们的日常生活变得便捷与丰 ...

  7. eja智能压力变送器工作原理_如何理解智能压力变送器工作原理及功能介绍

    如何理解智能压力变送器工作原理及功能介绍 智能压力变送器一般是由传感器.微处理器.存储器及模数.数模转换器组成.传感器用来检测被测量的信号,其所用材料因厂家而异.横河EJA为硅谐振式,把被测参数转换为 ...

  8. redis集群模式工作原理

    目录 1 redis集群模式背景 2 redis cluster介绍 2.1 节点间的内部通信机制 2.2 基本通信原理 2.2.1 gossip 协议 2.2.2 ping 消息深入 3 分布式寻址 ...

  9. 一文道明Redis集群架构工作原理及搭建

    文章目录 前言 一.Redis-Cluster(集群)长什么样子? 二.Redis-Cluster集群搭建 1. Redis集群搭建 2. 客户端测试 3. 增加主节点(6000)到集群环境中 4. ...

最新文章

  1. 360漏洞更新后系统进不去
  2. 2017.6.11 校内模拟赛
  3. JAVA无法加载此类文件,Java 7错误:无法加载本机库:ld.so.1:java:致命:libscf.so.1:打开失败:没有此类文件或目录...
  4. 源码免杀-过启发式的思路
  5. 解析腾讯云音视频通信三大核心网络技术实战与创新
  6. mongodb mysql并发_MongoDB:锁和并发控制
  7. python视频人脸检测_Python基于OpenCV实现视频的人脸检测
  8. 数据对象、属性和相似性
  9. 解读30个提高Web程序执行效率的好经验
  10. 【69】Sqrt(x)
  11. 并行磁共振成像——SENSE 敏感度编码成像
  12. 【word】批量添加图片题注与批量更新图注
  13. Excel查找一列中的相同值,删除该行或替换为空值
  14. 好用的区块链浏览器--BlockScout安装
  15. markdown左对齐
  16. 亚马逊产品违反受限政策,亚马逊受限产品恢复在售
  17. 建设工程法规专科【9】
  18. php钉钉webhook机器人,钉钉群消息机器人Webhook接口使用方法
  19. 【ICML2022】可达性约束强化学习
  20. 微信小程序1.1: 报错page[pages/XXX/XXX] not found.

热门文章

  1. php 中microtime,php microtime,php 中的microtime,microtime true
  2. python 3爬虫学习笔记(2)—— 通过属性查找标签
  3. qdialog 返回值_PyQt QDialog - 返回一个值并从对话框中关闭
  4. 客来乐:变革与升级,用技术点燃智慧时代
  5. 前端隐藏手机号码或者数字中间几位
  6. 求取多边形面积与周长(c++)
  7. 2014:大牌哀嚎 轻奢当道
  8. java实现pptx转html在线预览
  9. 之前Java做的一款小学生口算练习题软件
  10. windows10 解决音量图标红叉