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"));
    }
}
相关推荐
哦虎!2 小时前
【JavaEE进阶】SpringIoC&DI
spring
敲代码的小小酥2 小时前
谈SpringMVC与Spring WebFlux的区别与适用场景
java·后端·spring
nice_lcj5202 小时前
【从零理解 Spring AI · 03】Spring AI 在 Spring 生态里的位置
java·spring boot·大模型·spring ai·ai应用开发
风若飞15 小时前
Spring Ai 入门遇到问题1
java·后端·spring
AI源码18 小时前
旅游推荐管理系统
spring boot
lsc_blog21 小时前
年底还在招的岗位,先确认缺口和到岗要求
git·缓存·ci/cd·职场和发展·github
aiks_yuan21 小时前
Spring Boot SSE 流式输出变成一次性返回怎么办:大模型打字机效果失效的 5 个原因(Spring Boot 4.1.2 实测)
spring boot
xixiaoyunya1 天前
Redis缓存三大问题实战:穿透、击穿、雪崩,我用一个电商秒杀场景讲清楚
数据库·redis·缓存
Flynn Liang1 天前
上线后怎么排查 AI 调用?Spring AI Observability:token/延迟/成本埋点与全链路追踪
java·人工智能·spring·监控·可观测性·observability·springai
Thomas.Sir1 天前
第15课:SpringBoot连接池详解:HikariCP配置、调优、监控,4.x连接池新特性
java·spring boot