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

【Redis从头学-4】Redis中的String数据类型实战应用场景之验证码、浏览量、点赞量、Json格式存储

🧑‍💻作者名称:DaenCode
🎤作者简介:啥技术都喜欢捣鼓捣鼓,喜欢分享技术、经验、生活。
😎人生感悟:尝尽人生百味,方知世间冷暖。
📖所属专栏:Redis从头学


在这里插入图片描述


文章目录

  • 🌟前言
  • 🌟String数据类型分析
  • 🌟String类型实战应用场景
    • 验证码存储功能
      • 场景描述
      • 测试效果
      • 场景代码
    • 文章浏览量、点赞统计
    • 存储JSON格式数据
  • 🌟写在最后

🌟前言

之前的篇章对Redis已经做出了具体介绍,并且对其命令的使用也做出了相应的案例。本文就结合String数据类型结构的特性,一起探讨其实战中的应用场景。

🌟String数据类型分析

1.底层实现分析:其基于SDS数据结构实现。SDS作为一种动态字符串,不仅保存了字符串的值,还保存了字符串的长度信息,这样可以快速获取字符串的长度,不用重新计算。
2.空间效率分析:Redis的String类型以字节数数组形式存在,采用了一些优化策略节省空间。当一个字符串长度较小,redis会自动调整SDS的空间大小,减少内存浪费。
3.存储位置分析:Redis将值存储在内存中,读写效率搞笑。此外,还提高了大量的基础命令以及批量操作命令,提高了数据处理效率。
4.key过期策略:通过设置key的过期时间来节省冗余数据造成的空间浪费。

🌟String类型实战应用场景

通过上述对String类型的分析,可以结合实际需求选择适合String类型结构的场景,比如使用String类型实现验证码存储功能、文章浏览量统计功能、JSON格式热点数据功能等等。

验证码存储功能

场景描述

在用户注册功能中,要为用户生成和验证验证码,并设置相应的过期时间。此例子为简单演示功能,具体生产场景中比这个要复杂很多!旨在让大家感受String数据类型在redis中的应用场景。

测试效果

测试描述:首先通过获取验证码接口,获取验证码;之后通过注册接口将用户名、密码、以及输入的验证码输入来验证注册功能。
生成验证码
在这里插入图片描述
redis存储查看
在这里插入图片描述
进行注册
在这里插入图片描述

场景代码

场景:

  • 用户在前台输入用户名、密码
  • 点击获取验证码按钮,获取验证码(经过以下代码中的/captcha接口)
  • captcha接口中生成验证码,并存储到redis中,60秒过期时间。
  • 用户根据生成的验证码以及输入的用户名、密码进行注册
  • 验证验证码是否与redis中获取的一致。若一致再将注册的用户信息存入到数据库,否则注册失败。

具体的代码解释可以看相应的代码注释

@RestController
@RequestMapping("/api/v1/cap")
public class TestCodeController {@Autowiredprivate StringRedisTemplate stringRedisTemplate;@PostMapping("/register")public JsonData registerUser(@RequestBody UserLogin userLogin) {// 验证验证码是否正确if (validateCaptcha(userLogin.getUsername(),userLogin.getCaptcha())) {//保存到数据库,这里就不写了。return JsonData.buildSuccess("注册成功");}return JsonData.buildError("注册失败");}@GetMapping("/captcha")public JsonData getCaptcha(String userName) throws IOException {// 生成随机四位0-9的验证码String captcha = generateRandomCaptcha();// 将验证码保存在缓存中,用于后续验证。key的名称使用register拼接当前用户名String key="registry:"+userName;stringRedisTemplate.opsForValue().set(key,captcha,60, TimeUnit.SECONDS);return JsonData.buildSuccess(captcha);}//生成随机数private String generateRandomCaptcha() {Random random = new Random();StringBuilder captcha = new StringBuilder();for (int i = 0; i < 4; i++) {captcha.append(random.nextInt(10));}return captcha.toString();}private boolean validateCaptcha(String userName,String code) {//通过当前用户名相应的key来获取存储到redis中的code。来进行校验验证码。String codeUserName=stringRedisTemplate.opsForValue().get("registry:"+userName);if (code.equals(codeUserName)){return true;}return false;}
}

文章浏览量、点赞统计

这里由于篇幅原因,给出了简单的浏览量、点赞量统计的简单逻辑代码。主要实现是通过其increment这个API实现其key对应的值进行自增1,取消点赞则自减1。

//文章浏览量统计public JsonData browCount(int userId,int articleId){//browCountLong browCount=0L;browCount=stringRedisTemplate.opsForValue().increment(articleId+":"+userId);return JsonData.buildSuccess(browCount);}//点赞量。public JsonData likeCount(int userId,int articleId){//likeCount,可以通过文章的getter方法获取当前文章数量Long likeCount=0L;likeCount=stringRedisTemplate.opsForValue().increment(articleId+":"+userId);return JsonData.buildSuccess(likeCount);}

存储JSON格式数据

通过Jackson将数据库查询到的对象,转为json格式并存储到redis中。

//存储json格式数据public JsonData detail() throws JsonProcessingException {//假设数据是从数据库查询而来,将其存入到redis中User user=new User(1,"username","123456");ObjectMapper objectMapper=new ObjectMapper();String userJson=objectMapper.writeValueAsString(user);stringRedisTemplate.opsForValue().set(user.getId()+":"+"userInfo",userJson);return JsonData.buildSuccess();}

🌟写在最后

有关于String数据类型实战场景到此就结束了。功能演示代码的逻辑简单,目的是理解String数据类型的应用,实际场景的逻辑根据具体需求而定。感谢大家的阅读,希望大家在评论区对此部分内容散发讨论,便于学到更多的知识。


请添加图片描述

相关文章:

【Redis从头学-4】Redis中的String数据类型实战应用场景之验证码、浏览量、点赞量、Json格式存储

&#x1f9d1;‍&#x1f4bb;作者名称&#xff1a;DaenCode &#x1f3a4;作者简介&#xff1a;啥技术都喜欢捣鼓捣鼓&#xff0c;喜欢分享技术、经验、生活。 &#x1f60e;人生感悟&#xff1a;尝尽人生百味&#xff0c;方知世间冷暖。 &#x1f4d6;所属专栏&#xff1a;Re…...

linux 统计命令

统计命令 使用wc来进行统计 # wc [选项] 文件名wc -l a 2 awc -w a 8 a---------------l 统计行数-w 统计单词数-m 统计字符数-c 统计字节数 https://zhhll.icu/2021/linux/基础/统计命令/ 本文由 mdnice 多平台发布...

docker部署springboot应用

一、下载安装docker curl -fsSL https://get.docker.com | bash -s docker --mirror Aliyun 启动&#xff1a;systemctl start docker 二、配置国内镜像源 &#xff08;1&#xff09;在/etc/docker目录中添加daemon.json文件&#xff0c;内容如下&#xff1a; { …...

YOLO v5、v7、v8 模型优化

YOLO v5、v7、v8 模型优化 魔改YOLOyaml 文件解读模型选择在线做数据标注 YOLO算法改进YOLOv5yolo.pyyolov5.yaml更换骨干网络之 SwinTransformer更换骨干网络之 EfficientNet优化上采样方式&#xff1a;轻量化算子CARAFE 替换 传统&#xff08;最近邻 / 双线性 / 双立方 / 三线…...

回归预测 | MATLAB实现SSA-BP麻雀搜索算法优化BP神经网络多输入单输出回归预测(多指标,多图)

回归预测 | MATLAB实现SSA-BP麻雀搜索算法优化BP神经网络多输入单输出回归预测&#xff08;多指标&#xff0c;多图&#xff09; 目录 回归预测 | MATLAB实现SSA-BP麻雀搜索算法优化BP神经网络多输入单输出回归预测&#xff08;多指标&#xff0c;多图&#xff09;效果一览基本…...

QT的mysql(数据库)最佳实践和常见问题解答

涉及到数据库&#xff0c;首先安利一个软件Navicat Premium&#xff0c;用来查询数据库很方便 QMysql驱动是Qt SQL模块使用的插件&#xff0c;用于与MySQL数据库进行通信。要编译QMysql驱动&#xff0c;您需要满足以下条件&#xff1a; 您需要安装MySQL的客户端库和开发头文件…...

使用PyMuPDF库的PDF合并和分拆程序

PDF工具应用程序是一个使用wxPython和PyMuPDF库编写的简单工具&#xff0c;用于合并和分拆PDF文件。它提供了一个用户友好的图形界面&#xff0c;允许用户选择源文件夹和目标文件夹&#xff0c;并对PDF文件进行操作。 C:\pythoncode\blog\pdfmergandsplit.py 功能特点 选择文…...

2023/8/18 - You need to rely on yourself to achieve the life you want

...

Data Abstract for .NET and Delphi Crack

Data Abstract for .NET and Delphi Crack .NET和Delphi的数据摘要是一套或RAD工具&#xff0c;用于在.NET、Delphi和Mono中编写多层解决方案。NET和Delphi的数据摘要是一个套件&#xff0c;包括RemObjects.NET和Delphi版本的数据摘要。RemObjects Data Abstract允许您创建访问…...

Eclipse集成MapStruct

Eclipse集成MapStruct 在Eclipse中添加MapStruct依赖配置Eclipse支持MapStruct①安装 m2e-aptEclipse Marketplace的方式安装Install new software的方式安装&#xff08;JDK8用到&#xff09; ②添加到pom.xml 今天拿到同事其他项目的源码&#xff0c;导入并运行的时候抛出了异…...

采用pycharm在虚拟环境使用pyinstaller打包python程序

一年多以前&#xff0c;我写过一篇博客描述了如何虚拟环境打包&#xff0c;这一次有所不同&#xff0c;直接用IDE pycharm构成虚拟环境并运行pyinstaller打包 之前的博文&#xff1a; 虚拟环境venu使用pyinstaller打包python程序_伊玛目的门徒的博客-CSDN博客 第一步&#xf…...

Rx.NET in Action 中文介绍 前言及序言

Rx 处理器目录 (Catalog of Rx operators) 目标可选方式Rx 处理器(Operator)创建 Observable Creating Observables直接创建 By explicit logicCreate Defer根据范围创建 By specificationRangeRepeatGenerateTimerInterval Return使用预设 Predefined primitivesThrow …...

Azure Blob存储使用

创建存储账户,性能选择标准即可&#xff0c;冗余选择本地冗余存储即可 容器选择类别选择专用即可 可以上传文件到blob中 打开文件可以看到文件的访问路径 4.编辑中可以修改文件 复制链接&#xff0c;尝试访问&#xff0c;可以看到没有办法访问&#xff0c;因为创建容器的时候选…...

mysql、redis面试题

mysql 相关 1、数据库优化查询方法 外键、索引、联合查询、选择特定字段等等2、简述mysql和redis区别 redis&#xff1a; 内存型非关系数据库&#xff0c;数据保存在内存中&#xff0c;速度快mysql&#xff1a;关系型数据库&#xff0c;数据保存在磁盘中&#xff0c;检索的话&…...

22、touchGFX学习Model-View-Presenter设计模式

touchGFX采用MVP架构&#xff0c;如下所示&#xff1a; 本文界面如下所示&#xff1a; 本文将实现两个操作&#xff1a; 1、触摸屏点击开关按键实现打印开关显示信息&#xff0c;模拟开关灯效果 2、板载案按键控制触摸屏LED灯的显示和隐藏 一、触摸屏点击开关按键实现打印开…...

Python Opencv实践 - 图像高斯滤波(高斯模糊)

import cv2 as cv import numpy as np import matplotlib.pyplot as pltimg cv.imread("../SampleImages/pomeranian.png", cv.IMREAD_COLOR) rows,cols,channels img.shape print(rows,cols,channels)#为图像添加高斯噪声 #使用np.random.normal(loc0.0, scale1.0…...

使用 Qt 生成 Word 和 PDF 文档的详细教程

系列文章目录 文章目录 系列文章目录前言一、安装 Qt二、生成 Word 文档三、生成 PDF 文档四、运行代码并查看结果五、自定义文档内容总结 前言 Qt 是一个跨平台的应用程序开发框架&#xff0c;除了用于创建图形界面应用程序外&#xff0c;还可以用来生成 Word 和 PDF 文档。本…...

ssm+vue校园美食交流系统源码

ssmvue校园美食交流系统源码和论文026 开发工具&#xff1a;idea 数据库mysql5.7 数据库链接工具&#xff1a;navcat,小海豚等 技术&#xff1a;ssm 摘 要 随着现在网络的快速发展&#xff0c;网上管理系统也逐渐快速发展起来&#xff0c;网上管理模式很快融入到了许多商…...

电力系统基础知识(一)—电力系统概述

1、电压 也称作电势差或电位差&#xff0c;是衡量单位电荷在静电场中由于电势不同所产生的能量差的物理量。其大小等于单位正电荷因受电场力作用从A点移动到B点所做的功,电压的方向规定为从高电位指向低电位。其单位为伏特(V,简称伏),常用单位还有千伏(kV)、毫伏(mV)、微伏(uV…...

spring(15) SpringBoot启动过程

目录 一、过程简介二、过程流程图三、源码分析1、运行 SpringApplication.run() 方法2、确定应用程序类型3、加载所有的初始化器4、加载所有的监听器5、设置程序运行的主类6、开启计时器7、将 java.awt.headless 设置为 true8、获取并启用监听器9、设置应用程序参数10、准备环境…...

claude code用户如何通过taotoken解决账号封禁与token不足难题

&#x1f680; 告别海外账号与网络限制&#xff01;稳定直连全球优质大模型&#xff0c;限时半价接入中。 &#x1f449; 点击领取海量免费额度 Claude Code 用户如何通过 Taotoken 解决账号封禁与 Token 不足难题 对于深度依赖 Claude Code 作为编程助手的开发者而言&#xf…...

硬件入门 + 单片机基础(第14天)综合通信实训

ESP32 物联网结业项目&#xff1a;WiFi MQTT 继电器 温湿度 整合完整版 项目说明 这是物联网综合结业项目&#xff0c;整合了你学过的所有核心技术&#xff1a; WiFi 自动联网 断网重连MQTT 远程控制继电器&#xff08;开关&#xff09;DHT11 温湿度自动上报心跳包 消息…...

B站缓存视频转换全攻略:3分钟学会m4s转MP4无损转换

B站缓存视频转换全攻略&#xff1a;3分钟学会m4s转MP4无损转换 【免费下载链接】m4s-converter 一个跨平台小工具&#xff0c;将bilibili缓存的m4s格式音视频文件合并成mp4 项目地址: https://gitcode.com/gh_mirrors/m4/m4s-converter 你是否曾遇到过这样的情况&#x…...

OpenClaw与企业微信联动:自动发送工作通知、统计员工回复情况,简化管理流程

OpenClaw 赋能企业微信&#xff1a;构建智能高效的自动化管理新范式在数字化转型浪潮席卷各行各业的当下&#xff0c;企业对于内部流程优化、管理效率提升以及员工协作体验改善的需求日益迫切。传统的管理方式&#xff0c;如手动发送通知、人工统计反馈、层层审批流转等&#x…...

3步搞定Windows安卓应用安装:告别模拟器的全新体验

3步搞定Windows安卓应用安装&#xff1a;告别模拟器的全新体验 【免费下载链接】APK-Installer An Android Application Installer for Windows 项目地址: https://gitcode.com/GitHub_Trending/ap/APK-Installer 你是否曾经想在Windows电脑上运行手机应用&#xff0c;却…...

Ollama + Open WebUI部署教程:本地运行大语言模型,自建私有 AI 助手

Ollama Open WebUI部署教程&#xff1a;本地运行大语言模型&#xff0c;自建私有 AI 助手 不想把对话内容发给 OpenAI&#xff1f;有私密需求或离线场景&#xff1f;Ollama 让你在自己的服务器上运行 Llama、Qwen、DeepSeek 等开源大语言模型&#xff0c;Open WebUI 提供和 Ch…...

HunterPie完全指南:如何在《怪物猎人世界》中获得实时数据监控优势

HunterPie完全指南&#xff1a;如何在《怪物猎人世界》中获得实时数据监控优势 【免费下载链接】HunterPie-legacy A complete, modern and clean overlay with Discord Rich Presence integration for Monster Hunter: World. 项目地址: https://gitcode.com/gh_mirrors/hu/…...

从零到一:基于STM32CubeMX与FSMC高效点亮TFT LCD屏的实战指南

1. 硬件准备与环境搭建 第一次接触STM32和TFT LCD屏时&#xff0c;我完全被各种接线和术语搞晕了。后来才发现&#xff0c;只要选对硬件组合&#xff0c;事情就成功了一半。我用的STM32F103ZET6开发板&#xff08;俗称大容量版&#xff09;和正点原子2.8寸LCD屏&#xff0c;这套…...

Obsidian Image Toolkit:终极图像管理解决方案

Obsidian Image Toolkit&#xff1a;终极图像管理解决方案 【免费下载链接】obsidian-image-toolkit An Obsidian plugin for viewing an image. 项目地址: https://gitcode.com/gh_mirrors/ob/obsidian-image-toolkit Obsidian Image Toolkit 是一款专为 Obsidian 用户…...

3分钟告别浏览器Markdown阅读困境:这款扩展如何重塑你的技术文档体验

3分钟告别浏览器Markdown阅读困境&#xff1a;这款扩展如何重塑你的技术文档体验 【免费下载链接】markdown-viewer Markdown Viewer / Browser Extension 项目地址: https://gitcode.com/gh_mirrors/ma/markdown-viewer 你是否曾面对浏览器中杂乱的Markdown源代码感到困…...