当前位置: 首页 > news >正文

黑马点评Redis笔记

黑马点评Redis笔记

Redis基础篇:https://cyborg2077.github.io/2022/10/21/RedisBasic/
Redis实战篇:https://cyborg2077.github.io/2022/10/22/RedisPractice/

一、手机号+验证码注册登录

RandomUtil

生成定长随机数列
String code = RandomUtil.randomNumbers(6);

返回类型约定

public class Result {private Boolean success;private String errorMsg;private Object data;private Long total;public static Result ok(){return new Result(true, null, null, null);}public static Result ok(Object data){return new Result(true, null, data, null);}public static Result ok(List<?> data, Long total){return new Result(true, null, data, total);}public static Result fail(String errorMsg){return new Result(false, errorMsg, null, null);}
}

正则类

校验手机号

RegexUtils.isPhoneInvalid(phone);
public class RegexUtils {/*** 是否是无效手机格式* @param phone 要校验的手机号* @return true:符合,false:不符合*/public static boolean isPhoneInvalid(String phone){return mismatch(phone, RegexPatterns.PHONE_REGEX);}/*** 是否是无效邮箱格式* @param email 要校验的邮箱* @return true:符合,false:不符合*/public static boolean isEmailInvalid(String email){return mismatch(email, RegexPatterns.EMAIL_REGEX);}/*** 是否是无效验证码格式* @param code 要校验的验证码* @return true:符合,false:不符合*/public static boolean isCodeInvalid(String code){return mismatch(code, RegexPatterns.VERIFY_CODE_REGEX);}// 校验是否不符合正则格式private static boolean mismatch(String str, String regex){if (StrUtil.isBlank(str)) {return true;}return !str.matches(regex);}
}

ThreadLocal工具类

public class UserHolder {private static final ThreadLocal<UserDTO> tl = new ThreadLocal<>();public static void saveUser(UserDTO user){tl.set(user);}public static UserDTO getUser(){return tl.get();}public static void removeUser(){tl.remove();}
}

BeanUtil使用

属性拷贝BeanUtil.copyProperties
UserDTO userDTO = BeanUtil.copyProperties(user, UserDTO.class);
对象转哈希BeanUtil.beanToMap
Map<String, Object> userMap = BeanUtil.beanToMap(userDTO, new HashMap<>(),CopyOptions.create().setIgnoreNullValue(true).setFieldValueEditor((fieldName, fieldValue) -> fieldValue.toString()));

随机生成token

String token = UUID.randomUUID().toString(true);

Redis存登录信息

String tokenKey = LOGIN_USER_KEY + token;
stringRedisTemplate.opsForHash().putAll(tokenKey, userMap);
// 7.4.设置token有效期
stringRedisTemplate.expire(tokenKey, LOGIN_USER_TTL, TimeUnit.MINUTES);

二、缓存

字符串工具StrUtil

StrUtil.isNotBlank(shopJson)

Json工具JSONUtil

Json字符串转对象

String shopJson = stringRedisTemplate.opsForValue().get(key);
Shop shop = JSONUtil.toBean(shopJson, Shop.class);

对象转Json字符串

JSONUtil.toJsonStr(shop)

缓存穿透

缓存雪崩

缓存击穿

在这里插入图片描述
在这里插入图片描述

相关文章:

黑马点评Redis笔记

黑马点评Redis笔记 Redis基础篇&#xff1a;https://cyborg2077.github.io/2022/10/21/RedisBasic/ Redis实战篇&#xff1a;https://cyborg2077.github.io/2022/10/22/RedisPractice/ 一、手机号验证码注册登录 RandomUtil 生成定长随机数列 String code RandomUtil.ran…...

MX6ULL学习笔记 (一)交叉工具链的安装

前言&#xff1a; ARM 裸机、Uboot 移植、Linux 移植这些都需要在 Ubuntu 下进行编译&#xff0c;编译就需要编译 器&#xff0c;Ubuntu 自带的 gcc 编译器是针对 X86 架构的&#xff01;而我们现在要编译的是 ARM 架构的代码&#xff0c;因为我们编译的代码是需要烧写到ARM板子…...

uni-app中的onLoad不执行

问题 想在onLoad()中发请求获取数据&#xff0c;却发现onLoad()根本不会执行 原因 这个页面没有在pages.json中配置&#xff0c;不属于uni-app中的页面 uni-app的文档也做出了说明&#xff0c;组件是无法使用页面级的onLoad等生命周期的 解决方法 uni-app除支持页面生命周…...

EFAK-v3.0.1版部署与使用

一、前言 EFAK&#xff08;(Eagle For Apache Kafka&#xff0c;以前称为Kafka Eagle&#xff09;用于在使用 Topic 的情况下监控 Kafka 集群。包含Offset 的产生、Lag的变化、Partition的分布、Owner、Topic的创建以及修改的时间等信息。 二、环境&安装包 官方下载连接E…...

股票技术从初级到高级,从实盘进阶到摩尔缠论

一、教程描述 摩尔缠论是什么&#xff1f;一个伟大的缠论分支体系&#xff0c;由顶尖高手创立的缠论分支&#xff0c;这个顶尖高手&#xff0c;江湖上的代号为摩尔&#xff0c;可能是一个人&#xff0c;或者是一群人。摩尔缠论&#xff0c;基于缠论的核心思想与基础理论&#…...

力扣105. 从前序与中序遍历序列构造二叉树

栈 思路&#xff1a; 先序遍历&#xff1a;根、左子树、右子树&#xff1b;中序遍历&#xff1a;左子树、根、右子树&#xff1b;遍历先序遍历数组 prev&#xff0c;使用一个辅助栈缓存“根节点”&#xff1b;通过栈顶“根节点”与中序遍历数组 in 比较&#xff0c;确认是否到…...

Windows环境下的JDK安装与环境配置

一、JDK下载 1、打开Oracle官方网站下载页 Java Downloads | Oracle 中国 2、选择Java archive页&#xff0c;在版本列表中选择需要下载的版本 3、选择系统环境对应的版本&#xff0c;点击对应的下载按钮&#xff0c;弹出技术许可勾选框 4、勾选Oracle技术许可协议 5、输入Or…...

【密码学引论】Hash密码

第六章 Hash密码 md4、md5、sha系列、SM3 定义&#xff1a;将任意长度的消息映射成固定长度消息的函数功能&#xff1a;确保数据的真实性和完整性&#xff0c;主要用于认证和数字签名Hash函数的安全性&#xff1a;单向性、抗若碰撞性、抗强碰撞性生日攻击&#xff1a;对于生日…...

【传智杯】儒略历、评委打分、萝卜数据库题解

&#x1f34e; 博客主页&#xff1a;&#x1f319;披星戴月的贾维斯 &#x1f34e; 欢迎关注&#xff1a;&#x1f44d;点赞&#x1f343;收藏&#x1f525;留言 &#x1f347;系列专栏&#xff1a;&#x1f319; 蓝桥杯 &#x1f319;请不要相信胜利就像山坡上的蒲公英一样唾手…...

java基础-IO

1、基础概念 1.1、文件(File) 文件的读写可以说是开发中必不可少的部分&#xff0c;因为系统会存在大量处理设备上的数据&#xff0c;这里的设备指硬盘&#xff0c;内存&#xff0c;键盘录入&#xff0c;网络传输等。当然这里需要考虑的问题不仅仅是实现&#xff0c;还包括同步…...

Java变量理解

成员变量VS局部变量的区别 语法形式&#xff1a;从语法形式上看&#xff0c;成员变量是属于类的&#xff0c;而局部变量是在代码块或方法中定义的变量或是方法的参数&#xff1b;成员变量可以被 public,private,static 等修饰符所修饰&#xff0c;而局部变量不能被访问控制修饰…...

西南科技大学信号与系统A实验二(信号频谱分析)

一、实验目的 1.掌握用 matlab 软件绘制信号频谱的方法; 2.进一步理解抽样定理; 3.理解傅里叶变换的性质(频移特性). 二、实验原理 (一)fft 函数的调用 matlab 提供 fft 函数来计算信号 x(n)的快速离散傅里叶变换 (FFT). z 格式:y=fft(x) 计算信号 x 的快速离散傅里叶…...

C++-youtube cherno C++视频的一些知识点

对函数的调用在汇编中对应一句call func语句&#xff0c;其中func是一个函数的签名&#xff08;signature&#xff09;对程序而言&#xff0c;即使只有一个文件&#xff0c;链接器也需要链接&#xff0c;因为它需要链接程序入口点&#xff08;entry point&#xff09;一个程序的…...

sed命令

目录 一、sed 1.sed命令选项 2.语法选项 3.sed脚本格式 4.搜索替代 5.分组后向引用 1.提取版本号&#xff1a; 2.提取IP地址 3.提取数字权限 6.变量 二、免交互 1.多行重定向 2.免交互脚本 总结&#xff1a;本章主要介绍了seq和免交互的用法及相关知识 一、sed s…...

【经验分享】开发问题记录总结(持续更新)

目录 工具开发 界面类继承某自定义界面类时&#xff0c;出现布局混乱或者所有控件集中在左上角&#xff1f; 在继承自定义界面之后&#xff0c;以诸如 on_xxx_clicked() 模式设计的槽函数失效了? 使用pugi接口取出文本数据后&#xff0c;为什么该变量无法进行字符串比较&…...

MySQL导出数据库中每个表前 3000 条数据

以下是一个 Bash 脚本&#xff0c;它会连接到 MySQL 数据库&#xff0c;获取所有表名&#xff0c;并对每个表导出前 3000 条数据&#xff1a; #!/bin/bashUSERNAME"citycard" PASSWORD"密码" DATABASE"citycard" LIMIT3000# 导出数据库结构 mys…...

Spring事件注解@EventListener【观察】

一、背景 在开发工作中&#xff0c;我们常常会遇到这样一种情况&#xff1a;完成一项任务后&#xff0c;需要向其他模块广播消息或通知&#xff0c;以触发其他事件的处理。逐个发送请求固然可行&#xff0c;但更好的方式是采用事件监听&#xff0c;它是设计模式中的发布-订阅模…...

玩转Spring中强大的spel表达式!

玩转Spring中强大的spel表达式&#xff01;值得推荐的好文&#xff1a;https://zhuanlan.zhihu.com/p/174786047...

HTTPS攻击原理 被攻击该如何防护

简单来说&#xff0c;HTTPS HTTP SSL/TLS。 在 HTTP 协议中&#xff0c;客户端通过网络传输消息与服务器进行通信。但该消息采用明文的原始格式。坏人&#xff08;攻击者&#xff09;很容易窃听消息。这就是我们需要 SSL/TLS 的原因。 HTTPS是一种安全的HTTP协议&#xff0c…...

【.NET Core】委托(Delegate)应用详解

【.NET Core】委托&#xff08;Delegate&#xff09;应用详解 文章目录 【.NET Core】委托&#xff08;Delegate&#xff09;应用详解一、概述二、委托&#xff08;Delegate&#xff09;定义三、基础委托(Delegate) - 无返回值委托四、基础委托(Delegate) - 有返回值委托五、Mu…...

麦橘超然Flux图像生成控制台:从环境准备到生成测试的完整流程

麦橘超然Flux图像生成控制台&#xff1a;从环境准备到生成测试的完整流程 1. 引言 1.1 项目概述 麦橘超然Flux图像生成控制台是一款基于DiffSynth-Studio框架构建的AI绘画工具&#xff0c;集成了majicflus_v1模型&#xff0c;通过float8量化技术显著降低了显存需求。这个解决…...

Pi0 VLA模型技术解析:Flow-matching在机器人动作生成中的时间序列建模优势

Pi0 VLA模型技术解析&#xff1a;Flow-matching在机器人动作生成中的时间序列建模优势 1. 项目概述与核心价值 Pi0机器人控制中心是一个基于π₀视觉-语言-动作模型的通用机器人操控界面。这个项目提供了一个专业级的全屏Web交互终端&#xff0c;让用户能够通过多视角相机输入…...

在WSL中部署Phi-4-mini-reasoning:Windows开发者的轻量级AI推理环境搭建

在WSL中部署Phi-4-mini-reasoning&#xff1a;Windows开发者的轻量级AI推理环境搭建 1. 为什么选择WSL部署Phi-4-mini-reasoning 对于习惯Windows环境的开发者来说&#xff0c;WSL&#xff08;Windows Subsystem for Linux&#xff09;提供了一个完美的折中方案。它让你既能享…...

告别“幽灵刹车”:聊聊基于Python和OpenCV的驾驶员意图识别如何提升辅助驾驶体验

告别“幽灵刹车”&#xff1a;基于Python和OpenCV的驾驶员意图识别实战 想象一下这样的场景&#xff1a;你正驾驶在高速公路上&#xff0c;准备变道超车&#xff0c;突然车辆辅助系统误判你的意图&#xff0c;猛地踩下刹车——这就是俗称的"幽灵刹车"。这种误判不仅影…...

Qwen3.5-9B-AWQ-4bit软件测试用例生成:基于需求描述的自动化测试

Qwen3.5-9B-AWQ-4bit软件测试用例生成&#xff1a;基于需求描述的自动化测试 1. 引言&#xff1a;当AI遇见软件测试 "测试工程师80%的时间都在写测试用例"——这个行业现状正在被AI改写。想象一下&#xff0c;当你拿到一份产品需求文档&#xff0c;只需要简单描述功…...

卷积神经网络原理:从数学基础到PyTorch实现

卷积神经网络原理&#xff1a;从数学基础到PyTorch实现 1. 引言 想象一下&#xff0c;你看到一张猫的照片&#xff0c;几乎能瞬间认出这是只猫。但有没有想过&#xff0c;计算机是如何做到这一点的&#xff1f;这就是卷积神经网络&#xff08;CNN&#xff09;的神奇之处。今天…...

GPUStack 在华为昇腾 I A 服务器上的保姆级部署指南不

开发个什么Skill呢&#xff1f; 通过 Skill&#xff0c;我们可以将某些能力进行模块化封装&#xff0c;从而实现特定的工作流编排、专家领域知识沉淀以及各类工具的集成。 这里我打算来一次“套娃式”的实践&#xff1a;创建一个用于自动生成 Skill 的 Skill&#xff0c;一是用…...

收藏!小白程序员必看:轻松入门AI大模型,打造你的智能体(附学习资料)

AI智能体的概念不用多说&#xff0c;简单理解是由“大脑 手”组成&#xff0c;“大脑”不单单指大模型&#xff0c;但核心一定是大模型&#xff0c;可以理解成具备分析思考能力的指挥官&#xff0c;负责掌控全局和发号施令&#xff1b;而“手”好理解一些&#xff0c;就是负责…...

FPGA DDR3硬件测试避坑指南:如何设计一个可靠的读写控制器并验证全地址空间

FPGA DDR3硬件测试避坑指南&#xff1a;如何设计一个可靠的读写控制器并验证全地址空间 当你在凌晨三点的实验室里盯着示波器上跳动的DDR3信号波形&#xff0c;突然发现某个地址区间出现零星的数据错误时&#xff0c;就会明白为什么全地址测试不是可选项而是必选项。这不是关于…...

手把手教你用百度智能云微调大模型:从数据集准备到模型发布的保姆级避坑指南

手把手教你用百度智能云微调大模型&#xff1a;从数据集准备到模型发布的保姆级避坑指南 第一次尝试在百度智能云上微调大模型时&#xff0c;我踩遍了所有能想到的坑——从数据集格式错误导致反复上传失败&#xff0c;到闲时调度开关引发的莫名报错&#xff0c;甚至因为账户余额…...