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.rhkb.cn/news/432332.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

这6个aigc软件,性价比之王

随着人工智能技术的迅猛发展,越来越多的应用程序开始集成AIGC(人工智能生成内容)功能,提升用户体验。本文将介绍六款实用的AIGC软件下载,帮助您在各个领域提高工作效率,释放创造力。 1、即时 AI 作为国内…

Acwing Floyd算法

Acwing Floyd算法 Floyd-Warshall 算法,用于解决图中任意两点之间的最短路径问题。Floyd-Warshall 是一种 多源最短路径算法,可以处理带正权或负权的边,但要求图中不能有负权回路。 通过三层循环对每个顶点作为中转点 k 进行更新。通过检查…

企业为什么要上项目管理系统?项目管理的六大核心要素

随着企业规模的不断扩大和项目数量的增多,传统的手工管理方式已经无法满足企业在项目管理方面的需求。项目管理系统能够帮助企业实现项目信息的集中管理,将所有相关的项目信息(如任务、进度、预算、人员等)集中存储在一个平台上&a…

【STM32】 TCP/IP通信协议(1)

一、前言 TCP/IP是干啥的?它跟SPI、IIC、CAN有什么区别?它如何实现stm32的通讯?如何去配置?为了搞懂这些问题,查询资料可解决如下疑问: 1.为什么要用以太网通信? 以太网(Ethernet) 是指遵守 IEEE 802.3 …

中国式报表制作困难?!那是因为你没选对报表工具!

一、报表工具介绍 在信息化时代,数据是企业决策的核心驱动力。报表工具作为数据处理与分析的重要手段,广泛应用于财务、销售、运营等各个领域,成为企业洞察市场、优化管理、提升效率的关键工具。传统上,报表制作依赖于复杂的编程…

AWS注册时常见错误处理

引言 创建AWS账号是使用AWS云服务的第一步,但在注册过程中可能会遇到一些常见的问题。本文中九河云将帮助您排查和解决在创建AWS账户时可能遇到的一些常见问题,包括未接到验证电话、最大失败尝试次数错误以及账户激活延迟等。 常见问题及解决方法 1. …

tensorflow底层架构

tensorflow底层架构 架构图 Training libraries 和 Inference libs(训练库和推理库) Training libraries:用于模型的训练过程,包括定义模型、计算梯度、更新模型权重等。这些库提供了在训练过程中所需的所有功能。Inference lib…

如何使用ArcGIS Pro制作地理区位图

你是否经常在网上看到别人制作的地理区位图,自己也跃跃欲试,这里为你分享一下制作方法,希望能对你有所帮助。 乡镇数据处理 将乡镇边界数据加载进来,打开符号系统,将所有的乡镇边界数据设置成一个颜色,如…

流浪软件uniaccess agent 删除

cmd的C盘找不到就用git rm -rf 之后,只剩下 俩文件夹删不掉 然后360软件就看到了,可惜卸载失败 然后360文件就找到了,彻底删除 再回git 查看 方法 https://blog.51cto.com/u_16099347/11352333 https://blog.csdn.net/xioayu96/article/…

9.25盒马鲜生一面

1.自我介绍 2.css两种盒子模型 ​3.rem和em 4.px概念 5.transition和animation的区别 6.移动端适配方案 7.vh、vw、% 8.js基本数据类型 9.call、apply、bind的区别 10.js实现继承的方法 11.get和post的区别 12.web安全(XSS,CSRF) …

Hadoop安装与配置

一、Hadoop安装与配置 1、解压Hadoop安装包 找到hadoop-2.6.0.tar.gz,将其复到master0节点的”/home/csu”目录内,解压hadoop [csumaster0 ~]$ tar -zxvf ~/hadoop-2.6.0.tar.gz 解压成成功后自动在csu目录下创建hadoop-2.6.0子目录,可以用cd hadoo…

Matlab simulink建模与仿真 第十九章(生成C代码)

一、Configuration Parameters模型参数配置 1、仿真时间 (1)在Solver选项卡中可以设置仿真的起始时间和结束时间,一般起始时间设为0,而结束时间按需设置。 (2)如果希望仿真不会自动暂停(也就…

代码随想录算法训练营第55天 | 寻找存在的路径

寻找存在的路径 题目描述 给定一个包含 n 个节点的无向图中,节点编号从 1 到 n (含 1 和 n )。 你的任务是判断是否有一条从节点 source 出发到节点 destination 的路径存在。 输入描述 第一行包含两个正整数 N 和 M,N 代表节点…

音视频入门基础:AAC专题(9)——FFmpeg源码中计算AAC裸流每个packet的duration和duration_time的实现

音视频入门基础:AAC专题系列文章: 音视频入门基础:AAC专题(1)——AAC官方文档下载 音视频入门基础:AAC专题(2)——使用FFmpeg命令生成AAC裸流文件 音视频入门基础:AAC…

极度精简 Winows11 系统镜像!Tiny11 2311下载 - 支持苹果 M 芯片 Mac 安装 (ARM 精简版)!

最新推出的 Tiny11 是一款极端精简版 Windows 11 系统镜像,针对苹果 M 芯片 Mac 用户(ARM 架构)提供良好支持。Tiny11 内置了众多优化特性,如更小的安装体积和更快的启动速度,特别适合有特殊需求或老机型的用户。用户可…

打卡软件——人脸识别综合实现Pro

目录 概要 代码说明 1. 导入库 2. 加载预训练的车辆检测模型 3. 读取视频 4. 初始化变量 5. 逐帧处理视频 6. 处理帧 7. 处理检测结果 8. 计算框的坐标 9. 检查车辆中心是否已计数 10. 绘制检测框 11. 显示车流量 12. 退出条件 13. 释放资源 整体代码 效果展示…

过敏星人能否好好呼吸?约克VRF中央空调从呼吸开始全方位守护

对于包括向先生在内的过敏人群来说,秋天可能是比春天更难熬的坎儿,防不胜防的过敏原,例如空气中飘散的花粉、螨虫、霉菌、宠物毛发和皮屑、屋尘等,因为空气质量问题频频引发的过敏症状,令他们苦不堪言,止不住地打喷嚏、眼睛越揉越痒、起床后就开始擦鼻涕…… 如何才能远离这些…

免费的高质量、美观的甘特图模板

呈现您的项目规划新高度,精选几款高品质、视觉出众的甘特图模板。 甘特图Excel模板-Ganttable系统风格甘特图Excel模板-专业甘特图Excel模板-浅蓝色甘特图Excel模板-深灰色 这些 Excel 甘特图模板均源自 Ganttable 甘特图AI工具的智能生成与导出。利用 Ganttable&a…

Win32动态库介绍及全局函数导出

Windows操作系统中,库分为动态链接库(dll)和静态链接库(lib) 动态库是Windows中实现代码共享的一种方式。它是一个二进制式文件,不可单独运行,需要调用方调用才能运行。在Windows中,动态库可以被多种编程语言所支持。 静态链接库不…