redis实际开发应用简单实现

devtools/2025/2/4 8:46:01/

短信登录

首先来看看登录与注册常规实现流程如下:

其中,很多网站都有手机号验证码登录功能

如百度

实现之前咱可以来验证码有啥特点:一定时间内过期、验证码随机、与手机号会唯一匹配

所以可以使用redis的string来实现更容易,key设置成手机号,value设置成验证码,过期时间设置成3分钟

实现如下

   //引入redis工具类@Resourceprivate StringRedisTemplate stringRedisTemplate;@Overridepublic Result sendCode(String phone) {//1,看手机号格式是否正确这里可以自己实现下校验手机号格式boolean is_valid = sPhoneInvalid(phone);if (!is_valid) {return Result.fail("手机号格式错误");}//2,看手机号是否存在数据库QueryWrapper<User> queryWrapper = new QueryWrapper<>();User user = getOne(queryWrapper.eq("phone", phone));if (user == null) {return Result.fail("用户未注册过,请注册");//这里需前端跳转到注册网页}//3,生成验证码String code = RandomUtil.randomNumbers(6);log.info("请求验证码"+code);//4,存储进入redis 设置常量 key=登录业务前缀+邮箱 过期时间3分钟stringRedisTemplate.opsForValue().set(phone,code,3L, TimeUnit.MINUTES );//5,返回验证码HashMap<String,String> codeValue = new HashMap<>();codeValue.put("code", code);return Result.ok(codeValue);}

请求

看下redis是否存入缓存

可以看到ttl即过期时间

可以在进行等待会刷新下redis

看到已显示键不存在

缓存

缓存就是数据交换的缓冲区,是存贮数据的临时地方,一般读写性能较高。

缓存一般作为数据层的中间层,在查询数据之前,先查询缓存缓存有,直接返回,缓存没有,再查询db

这里参考黑马点评的例子来实现查询商品信息加入缓存功能

功能:给店铺类型查询业务添加缓存

ShopController 

@RestController
@RequestMapping("/shop")
public class ShopController {@Resourcepublic IShopService shopService;/*** 根据id查询商铺信息* @param id 商铺id* @return 商铺详情数据*/@GetMapping("/{id}")public Result queryShopById(@PathVariable("id") Long id) {return shopService.queryById(id);}}

ShopServiceImpl(这里采用string结构来实现,当然其它的数据结构也可以)

@Service
public class ShopServiceImpl extends ServiceImpl<ShopMapper, Shop> implements IShopService {@ResourceStringRedisTemplate stringRedisTemplate;@Overridepublic Result queryById(Long id) {String cache_key = CACHE_SHOP_KEY+id;//查询redis是否存在商铺信息String shop_json = stringRedisTemplate.opsForValue().get(cache_key);//查询到了数据 直接返回  但是返回的数据为json格式的 需返回成对象形式if (!StrUtil.isBlank(shop_json)){Shop shop_result = JSONUtil.toBean(shop_json, Shop.class);return Result.ok(shop_result);}//redis找不到数据 到mysql再进行查询Shop shop_result = getById(id);//mysql中找不到则返回报错if (shop_result == null){return Result.fail("店铺不存在");}//存在则进缓存stringRedisTemplate.opsForValue().set(cache_key, JSONUtil.toJsonStr(shop_result),LOCK_SHOP_TTL, TimeUnit.MINUTES);//返回return Result.ok(shop_result);}
}

请求浏览器

来看看首次请求浏览器耗时

可以看到耗时5.25s

看到已存入redis

再次请求耗时 38ms,耗时得到了很大的优化

参考资料:黑马redis


http://www.ppmy.cn/devtools/155957.html

相关文章

01:安装和部署

安装和部署 1、搭建虚拟机2、修改服务器源3、安装增强工具 1、搭建虚拟机 下载安装虚拟机VMware&#xff0c;按照如下步骤配置 输入许可证密钥 配置虚拟机&#xff0c;创建一台虚拟电脑 安装Ubantu操作系统 注意&#xff1a;需要鼠标选中VMware软件&#xff0c;才可以按…

解决PyG安装中torch-sparse安装失败问题:详细指南

1 问题描述 最近在学习GNN&#xff0c;需要使用PyTorch Geometric&#xff08;PyG&#xff09;库。在安装PyG的过程中&#xff0c;遇到了torch-sparse安装失败的问题&#xff0c;错误提示为&#xff1a; ERROR: Failed building wheel for torch-sparse本文将详细记录问题的解…

c++之模板进阶

在前面的文章中&#xff0c;我们已经简单的了解了模板的使用&#xff0c;在这篇文章中&#xff0c;我们将继续深入探讨模板 1.模板的特化 1.1 概念 通常情况下&#xff0c;使用模板可以实现一些与类型无关的代码&#xff0c;但对于一些特殊类型的可能会得到一些错误的结果&a…

在C++中,成员变量必须在对象构造完成前初始化,但初始化的方式有多种...

在C中&#xff0c;成员变量必须在对象构造完成前初始化&#xff0c;但初始化的方式可以有多种&#xff0c;具体取决于成员变量的类型和设计需求。以下是C中成员变量初始化的规则和相关机制&#xff1a; 1. 成员变量必须初始化 如果成员变量是基本类型&#xff08;如 int、doub…

马克思主义哲学知识梳理(考公版)

马克思主义哲学是照亮我们认识世界、改造世界的明灯&#xff0c;考公人学好它&#xff0c;笔试面试都能 “开挂”。下面就一起来梳理这些重要内容。 一、哲学 哲学就像是一门 “智慧的学问”&#xff0c;它是对世界基本和普遍的问题研究的学科&#xff0c;探索着宇宙、人生、…

记录一次,PyQT的报错,多线程Udp失效,使用工具如netstat来检查端口使用情况。

1.问题 报错Exception in thread Thread-1: Traceback (most recent call last): File "threading.py", line 932, in _bootstrap_inner File "threading.py", line 870, in run File "main.py", line 456, in udp_recv IndexError: list…

《AI大模型开发笔记》DeepSeek技术创新点

一、DeepSeek横空出世 DeepSeek V3 以颠覆性技术架构创新强势破局&#xff01;革命性的上下文处理机制实现长文本推理成本断崖式下降&#xff0c;综合算力需求锐减90%&#xff0c;开启高效 AI 新纪元&#xff01; 最新开源的 DeepSeek V3模型不仅以顶尖基准测试成绩比肩业界 …

深入理解SpringMVC:数据处理、文件上传与异常处理等常见技术应用及解决方案

目录 前言 第一章&#xff1a;数据处理与跳转 1. 结果跳转方式 2. 使用 ResponseBody 返回 JSON 数据 3. 配置静态资源不被拦截 第二章&#xff1a;SpringMVC 实现文件上传 1. 导入文件上传的依赖 2. 配置文件上传解析器 3. 文件上传示例 第三章&#xff1a;SpringMV…