Spring-缓存初步认识

Spring-缓存

简单介绍

  • 缓存是一种介于数据永久存储介质和数据应用之间的数据临时存储介质
  • 缓存有效提高读取速度,加速查询效率

spring使用缓存方式

  • 添加依赖
java 复制代码
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-cache</artifactId>
        </dependency>
  • 添加使用缓存的注解
java 复制代码
package com.ustc;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cache.annotation.EnableCaching;

@SpringBootApplication
@EnableCaching
public class Quick1Application {

    public static void main(String[] args) {
        SpringApplication.run(Quick1Application.class, args);
    }

}
  • 使用缓存,将当前操作结果写入缓存

这里的cacheSpace 表示缓存控件,然后可以从形参中读取id查询所需要的值

java 复制代码
    @Override
    @Cacheable(value = "cacheSpace",key="#id")
    public tbl_book getById(Integer id) {
        return bookMapper.selectById(id);// 调用Mapper查询
    }

手机验证码生成案例

  • 使用CachePut注解 每次生成新的缓存
java 复制代码
    @Override
    @CachePut(value = "smsCode",key = "#tele")
    public String sendCodeToSMS(String tele) {
        // 当前方法的返回值 进入当前key所对应的缓存中
        String code = codeUtils.generator(tele);
        return code;
    }
  • 校验验证码
java 复制代码
    @Override
    public boolean checkCode(SMSCode smsCode) {
        // 取出内存中的验证码 和传递过来的验证码进行比对 如果相同 返回true
        String code = smsCode.getCode();// 内存加载验证码

        String cacheCode = codeUtils.get(smsCode.getTele());// 传递过来的验证码
        return cacheCode.equals(code);
    }
  • 加密验证码
java 复制代码
package com.ustc.controller.utils;

import org.springframework.cache.annotation.Cacheable;
import org.springframework.stereotype.Component;

@Component
public class CodeUtils {

    private String[] patch = {"00000","0000","000","00","0",""};
    public String generator(String tele){
        int hash = tele.hashCode();// 生成哈希值
        int encryption = 20206666;
        // 第一次加密
        long result = hash ^ encryption;
        long nowTime = System.currentTimeMillis();
        result = result ^ nowTime;
        long code = result % 1000000;
        code = code < 0 ?-code :code;
        String codeStr = code + "";
        int len = codeStr.length();// 计算长度
        return patch[len - 1] + codeStr;
    }

    // 获取传递过来的验证码  从缓存中查询
    @Cacheable(value = "smsCode",key = "#tele")
    public String get(String tele){
        return null;
    }

    public static void main(String[] args) {
        System.out.println(new CodeUtils().generator("15005650262"));
    }
}
相关推荐
chentao1061 小时前
Spring-Boot健康检查的正确打开方式
spring boot
钟琛......1 小时前
Java事务失效(面试题)的常见场景
java·数据库·spring
zhangyifang_0091 小时前
Spring Boot Actuator 跟踪HTTP请求和响应
spring boot·后端·http
一只爱撸猫的程序猿2 小时前
构建一个结合AI功能实现智能的Redis哨兵切换检测和处理的简单实例
spring boot·redis·aigc
代码or搬砖3 小时前
Spring JDBC配置与讲解
java·数据库·spring
魔芋红茶3 小时前
Spring 源码学习 3:工厂后处理器
java·学习·spring
m0_634865403 小时前
sa-token:我将代替你,Spring Security
java·后端·spring
蚰蜒螟3 小时前
Spring与SLF4J/Logback日志框架深度解析:从源码看日志系统设计
java·spring·logback
IT_10243 小时前
springboot企业级项目开发之项目测试——集成测试!
spring boot·后端·spring·集成测试
Ting-yu3 小时前
零基础学习Redis(14) -- Spring中使用Redis
redis·学习·spring