Redis 字符串类型的典型应用场景

目录

1. 缓存功能

2. 计数功能

3. 共享会话(Session)

4. 手机验证码


前言

这里将详细介绍 Redis 字符串类型在实际开发中的几个典型应用场景,并提供相应的伪代码示例。


1. 缓存功能

场景描述

在许多Web应用中,数据通常需要从数据库(如 MySQL)中获取。然而,频繁访问数据库会导致性能瓶颈。为了提高读取速度和减轻后端压力,可以使用 Redis 作为缓存层。大部分请求的数据直接从 Redis 中获取,只有当缓存未命中时才去查询数据库,并更新缓存。

架构图

伪代码实现

UserInfo getUserInfo(long uid) {// 根据用户ID生成Redis键String key = "user:info:" + uid;// 尝试从Redis中获取用户信息String value = redis.get(key);if (value != null) {// 如果缓存命中,反序列化JSON并返回UserInfo userInfo = JSON.parse(value);return userInfo;}// 如果缓存未命中,从MySQL中获取用户信息UserInfo userInfo = mysql.query("SELECT * FROM user_info WHERE uid = " + uid);if (userInfo == null) {// 如果没有找到用户信息,返回404return null;}// 序列化用户信息为JSON格式String jsonValue = JSON.stringify(userInfo);// 将用户信息写入Redis缓存,并设置过期时间为1小时redis.set(key, jsonValue, 3600);return userInfo;
}

注意事项

  • Redis 没有表名、字段名等概念,设计合理的键名有助于防止键冲突和项目的可维护性。
  • 推荐的键名格式是“业务名:对象名:唯一标识:属性”,例如:“vs:user_info:6379”或“u:6379🇫🇷m:5217”。

2. 计数功能

场景描述

许多应用需要统计某些事件的发生次数,例如视频网站中的视频播放次数。Redis 的 INCR 命令非常适合用于快速计数。

架构图

伪代码实现

long incrVideoCounter(long vid) {String key = "video:" + vid;long count = redis.incr(key);return count;
}

注意事项

  • 实际开发中还需要考虑防作弊、按不同维度计数、避免单点问题、数据持久化到底层数据源等问题。

3. 共享会话(Session)

场景描述

在分布式 Web 应用中,用户的 Session 信息(如登录信息)通常存储在各自的服务器上。这可能导致用户每次请求被负载均衡到不同的服务器时,需要重新登录。使用 Redis 可以集中管理 Session 信息,确保无论用户访问哪台服务器都能保持一致的会话状态。

架构图

伪代码实现

// 获取用户Session信息
String getSession(String sessionId) {String sessionData = redis.get(sessionId);return sessionData;
}// 更新用户Session信息
void updateSession(String sessionId, String sessionData) {redis.set(sessionId, sessionData, 3600); // 设置过期时间为1小时
}

注意事项

  • 确保 Redis 是高可用和可扩展的,以保证系统的稳定性和可靠性。

4. 手机验证码

场景描述

为了安全验证用户身份,很多应用会在用户登录时发送手机验证码。为了避免频繁请求,可以限制用户每分钟获取验证码的频率(例如不超过5次)。Redis 可以用来实现这一功能。

伪代码实现

String sendVerificationCode(String phoneNumber) {String key = "shortMsg:limit:" + phoneNumber;// 设置过期时间为1分钟,只在不存在key时才能设置成功boolean r = redis.set(key, "1", 60, "NX");if (!r) {// 如果之前已经设置了该手机号的验证码long c = redis.incr(key);if (c > 5) {// 超过了每分钟5次的限制return null; // 限制发送}}// 生成随机的6位数验证码String validationCode = generateRandomCode(6);String validationKey = "validation:" + phoneNumber;// 验证码5分钟内有效redis.set(validationKey, validationCode, 300);// 返回验证码,随后通过手机短信发送给用户return validationCode;
}boolean verifyVerificationCode(String phoneNumber, String validationCode) {String validationKey = "validation:" + phoneNumber;String storedCode = redis.get(validationKey);if (storedCode == null) {// 没有这个手机号的验证码记录,验证失败return false;}return storedCode.equals(validationCode);
}

注意事项

  • 生成的验证码需要有一定的安全性,避免被轻易猜测。
  • 验证码的有效时间应根据具体需求合理设置。

总结

Redis 的字符串类型在多种场景下都非常有用,包括但不仅仅缓存、计数、会话管理和验证码处理。我们可以根据业务灵活运用,毕竟技术是为业务服务的!!感谢阅览!!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.xdnf.cn/news/147024.html

如若内容造成侵权/违法违规/事实不符,请联系一条长河网进行投诉反馈,一经查实,立即删除!

相关文章

使用AVL树实现Map

一、数组在裂变扩容时可能会出现环、在数组元素转为链表之后选择尾插法插入节点、数组到链表到AVL到RBT的转换 1、数组在裂变扩容时链表中的节点计算出来的位置可能也会发生变化,在多线程情况下调整节点位置可能会出现环。 2、数组中的数组元素转为链表后插入新节点…

在大模型训练中,为什么GPU 通常比 CPU 更重要

在大模型训练中,GPU 通常比 CPU 更重要,原因主要有以下几点: 一、并行计算能力 GPU 拥有强大的并行计算能力。在大模型训练中,需要处理海量的数据和复杂的计算任务。例如,深度学习模型中的矩阵运算、卷积运算等&…

13. 了解人工智能可能存在的偏见

这篇文章没有太多技术和代码细节,更多的是作为一份有趣的报告。 这里没有任何模型会被训练。 这篇文章也为生成式人工智能导论课程中 HW8: Safety Issues of Generative AI 提供中文引导。 代码文件下载 文章目录 为什么人工智能存在偏见?动手试试加载模…

算法_BFS解决多源最短路问题---持续更新

文章目录 前言引入矩阵题目要求题目解析代码如下 飞地的数量题目要求题目解析代码如下 地图中的最高点题目要求题目解析代码如下 地图分析题目要求题目解析代码如下 前言 本文将会向你介绍有关宽度优先搜索(BFS)解决多源最短路问题的相关题型&#xff1…

故障诊断│GWO-DBN灰狼算法优化深度置信网络故障诊断

1.引言 随着人工智能技术的快速发展,深度学习已经成为解决复杂问题的热门方法之一。深度置信网络(DBN)作为深度学习中应用比较广泛的一种算法,被广泛应用于分类和回归预测等问题中。然而,DBN的训练过程通常需要大量的…

机器人速度雅可比矩阵(机器人动力学)

博途PLC矩阵求逆 矩阵求逆 博图SCL_博图矩阵运算-CSDN博客文章浏览阅读839次。本文介绍如何用C语言实现矩阵求逆的过程,详细解析了相关代码,适合线性代数和编程爱好者学习。https://rxxw-control.blog.csdn.net/article/details/122367883 1、二自由度平面关节机器人速度雅…

项目第十二弹:功能联调

项目第十二弹:功能联调 一、发布订阅功能测试1.生产者2.消费者3.演示4.持久化信息查看1.消息2.SQLite3数据库 二、持久化恢复测试1.代码2.gc3.演示 三、虚拟机和信道隔离测试1.责任划分2.如何测试3.生产者4.消费者5.演示 一、发布订阅功能测试 我们直接上TOPIC交换…

MySQL中的逻辑条件

逻辑条件组合两个比较条件的结果来产生一个基于这些条件的单个的结果,或者逆转一个单个条件的结果。当所有条件的结果为真时,返回行。 SQL的三个逻辑运算符是: AND、OR、NOT 可以在WHERE子句中用AND和OR运算符使用多个条件。 示例一&#…

惊爆!高通要收购英特尔,巨头也会被时代抛弃!

今天看到的外媒消息,高通要收购英特尔,看到消息的时候,其实,还是挺吃惊的。 高通是移动芯片的王者,英特尔是 PC 芯片的王者。当然了,英特尔这个可能需要再加上两个字:曾经的 PC 芯片王者。 其实…

植物大战僵尸【源代码分享+核心思路讲解】

植物大战僵尸已经正式完结,今天和大家分享一下,话不多说,直接上链接!!!(如果大家在运行这个游戏遇到了问题或者bug,那么请私我谢谢) 大家写的时候可以参考一下我的代码思…

在VMware16中安装Windows 10:完整教程

在VMware中安装Windows 10:完整教程 1.安装环境准备2.创建虚拟机 1.安装环境准备 1.虚拟机: VMware-workstation-full-16.2.2-19200509 2.系统镜像:win10 2.创建虚拟机 1.自定义 2.下一步 3.稍后安装系统 3.默认下一步 4.虚拟机取名和选择存放路径(按需更改…

利士策分享,江西新余悲剧背后的深思:安全与责任的重构

利士策分享,江西新余悲剧背后的深思:安全与责任的重构 在这个信息瞬息万变的时代,每一次突发事件都能迅速触动社会的神经, 而江西新余近期发生的悲剧,更是让我们在悲痛之余,不得不深刻反思安全管理与社会…

AVL树与红黑树

目录 AVL树 AVL树节点的定义 AVL树的插入 AVL树的旋转 右单旋 左单旋 左右双旋 右左双旋 AVL树的验证 AVL树的性能 红黑树 红黑树的性质 红黑树节点的定义 红黑树结构 红黑树的插入操作 按照二叉搜索的树规则插入新节点 检测新节点插入后,红黑树的性…

升级你的HarmonyOS体验:一窥功能引导与拖拽交换的独家技巧

文章目录 前言项目目录结构开发流程主要步骤讲解关键配置Index.ets 页面讲解高光组件相关HeaderApp 总结 前言 在当今的移动应用开发领域,为了提供更加友好和直观的用户体验,开发者们通常会集成多种交互功能来增强应用的互动性和易用性。在这些功能中&a…

【机器学习】12-决策树1——概念、特征选择

机器学习10-决策树1 学习样本的特征,将样本划分到不同的类别(分类问题)或预测连续的数值(回归问题)。 选择特征,划分数据集,划分完成形成模型(树结构),一个…

JavaSE——多线程基础

概述 现代操作系统(Windows,macOS,Linux)都可以执行多任务。多任务就是同时允许多个任务。例如:播放音乐的同时,浏览器可以进行文件下载,同时可以进行QQ消息的收发。 CPU执行代码都是一条一条顺…

Matlab R2018a怎么下载安装?Matlab R2018a保姆级详细安装教程

Matlab R2018a下载方法: Matlab R2018a安装教程: 1、右击下载好的压缩包,选择解压到Matlab R2018a 2、打开文件夹【R2018a_win64】,右击下面的setup.exe,选择【以管理员身份运行】 3、点击选择【使用文件安装密钥】&a…

IDEA连接数据库报错:Access denied for user ****

使用IDEA开发时,通过Databse连接数据库。多次连接报错:Access denied for user **** 如下所示: ​ ‍ ‍ ​ ‍ 花了不少时间排查,确认账号、密码,后面发现账号后多了个空格,而且不容易发现&#xf…

proteus仿真软件简体中文版网盘资源下载(附教程)

对于电子通信专业的小伙伴来说,今天文章的标题应该不会陌生。Proteus是一款具有广泛应用的仿真软件,它的功能非常强大,适用于所有单片机的仿真工作,能够从原理图、调试、到与电路的协同仿真一条龙全部搞定,受到所有用户…

交叉熵损失函数的使用

交叉熵损失函数 交叉熵损失函数(Cross-Entropy Loss),也称为对数损失(Log Loss),是机器学习和深度学习中常用的损失函数之一,尤其在分类问题中。它衡量的是模型预测的概率分布与真实标签的概率…