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

在这里插入图片描述

一、缓存

  • 当用户访问量很大时,需要多次访问数据库,为了提高性能,需要引入缓存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二(在虚拟机中的安装,桌面插件)

  • 1
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值