欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 教育 > 高考 > redis:简单介绍string的典型使用场景

redis:简单介绍string的典型使用场景

2025/9/16 12:26:24 来源:https://blog.csdn.net/li209779/article/details/143445151  浏览:    关键词:redis:简单介绍string的典型使用场景

在这里插入图片描述

个人主页 : 个人主页
个人专栏 : 《数据结构》 《C语言》《C++》《Linux》《网络》 《redis学习笔记》

文章目录

  • 前言
  • string的典型使用场景
    • 缓存功能
    • 计数功能
    • 共享会话
    • 手机验证码
  • 总结


前言

本文是作为 简单介绍 string的典型使用场景的学习笔记


string的典型使用场景

缓存功能

下图是比较典型的缓存使用场景,其中redis作为缓存层,mysql作为存储层,绝大部分请求数据从redis中获取。由于redis具有支撑高并发的特性,所以缓存通常能起到加速读写和降低后端压力的作用
在这里插入图片描述

  • 用户(user):发起请求的主体
  • get:HTTP请求方法,用户通过它向Web服务发起获取数据的请求
  • return:返回操作,如Web服务返回给用户的响应,缓存层 或 存储层 返回给业务层的数据
  • Web服务:接受用户请求,并将其转发给业务层进行处理 或 对业务层的响应进行格式化,返回给用户
  • 业务层:处理具体的业务逻辑。接受Web服务的请求,并根据需要调用 存储层 或 缓存层 来获取数据
  • hit:缓存命中,即缓存层中存在用户请求的数据,可以直接返回给业务层。
  • miss:缓存未命中,即缓存层中不存在用户请求的数据,业务层需要去存储层查找数据
  • 缓存层:存储热点数据的系统,用于加快数据访问速度,当缓存层命中时,则直接返回数据;如果缓存层未命中,则去存储层查找
  • 存储层:用于持久化存储数据的系统,当缓存层未命中时,存储层负责提供用户请求的数据
  • write cache:当缓存层未命中时,业务层从存储层获取数据后,将数据写入缓存层。

整体思路:应用服务器访问数据的时候,先查询redis,如果redis上数据存在,就直接从redis取数据交给应用服务器,不继续访问数据库;如果redis上的数据不存在,再读取mysql,把读取到的结果,返回给应用层服务器,同时,把这个数据也写入到redis中。

其中redis这样的缓存,经常用来存储 "热点"数据(二八原则),也就是高频被使用的数据,如我们可以把最近使用到的数据作为热点数据,存储在缓存层。
但随着时间的推移,一定会有很多的 请求数据 在redis访问不到,从而从mysql读取并写入redis中,此时redis的数据就会越来越多,怎么处理?

  1. 把数据写给redis的同时,给key设置一个过期时间
  2. redis在内存不足的时候,提供了淘汰策略

计数功能

许多应用都会使用redis作为计数的工具,他可以实现快速计数,查询存储的功能,同时数据可以异步处理。
下图是记录视频播放次数
在这里插入图片描述

  1. 用户点击播放视频,用户通过视频网站或应用界面点击播放某个视频
  2. 视频网站发送请求,视频网站接收到用户的播放请求后,会向redis数据库发送一个请求,以获取该视频在redis中的相关数据(如播放此时)
  3. redis数据库处理(一种内存数据结构存储),在redis中,每个视频都有唯一的ID(如"video":1111),redis执行 incr 命令来增加该视频ID对应的计数器值(视频播放的次数)
  4. 返回数据,redis处理完请求后,会将最新的播放次数等数据返回给视频网站,视频网站再将这些数据展示给用户。
  5. 异步方式处理,redis在更新播放次数的同时,系统会启动一个异步任务(消息队列,线程池等方式),该异步任务会将redis的播放次数同步到其它数据源
  6. 视频存储,视频本身数据会被存储在视频存储系统中
  7. 统计数据仓库,播放次数等统计数据则会被存储到统计数据仓库中,用于后续的数据分析,报表生成…

共享会话

使用redis将用户的session信息进行集中管理,这样只要保证redis是高可用和可扩展信的,无论用户均衡到哪个Web服务器上,都集中从redis中查询,更新session信息。
redis集中管理session
在这里插入图片描述

手机验证码

现在很多应用出于安全考虑,会在每次进行登录时,让用户输入手机号并配合给手机发送验证码,让用户再次输入收到的验证码进行验证。

为了短信接口不回频繁访问,会限制用户每分钟获取验证码的频率。列如发送验证码一分钟不能超过5次

// 发送验证码给指定电话号码  
function sendCaptchaCode(phoneNumber) {  // 设置验证码的key,包含限制信息  key = "shortMsg:limit:" + phoneNumber;  // 设置key,过期时间为60秒,并且只在key不存在时设置成功(NX选项)  r = Redis.set(key, "someValue", "EX=60", "NX");  // 检查是否已经存在该key,即是否已发送过验证码  if (r == false) {  // 检查是否超过最大发送次数(例如5次)  if (C > 5) {  // 如果超过,说明一分钟 超过 5次限制了  return null;   }   }  // 增加验证码发送次数计数器  counterKey = "shortMsg:counter:" + phoneNumber; C = Redis.incr(counterKey);  // 生成随机的6位数验证码  validationCode = generateRandom6DigitCode();  // 设置验证码的key和值,过期时间为300秒  validationKey = "validation:" + phoneNumber;  Redis.set(validationKey, validationCode, "EX=300");  // 返回验证码(实际中不会直接返回,而是通过短信发送给用户)  // 实际应调用短信发送接口  return validationCode; 
}  // 验证用户输入的验证码是否正确  
function verifyCaptchaCode(phoneNumber, inputCode) {  // 设置验证码的key  validationKey = "validation:" + phoneNumber;  // 从Redis中获取验证码  value = Redis.get(validationKey);  // 检查验证码是否存在  if (value == null) {  // 如果不存在,说明没有验证码记录,验证失败  return false;  }  // 比较输入的验证码和Redis中的验证码  if (value == inputCode) {  // 如果相同,验证成功  return true;  } else {  // 如果不同,验证失败  return false;  }  
}  // 辅助函数:生成随机的6位数验证码  
function generateRandom6DigitCode() {  // 此处为示例,实际应实现生成随机6位数验证码的逻辑  return Math.floor(100000 + Math.random() * 900000).toString();  
}

总结

以上就是我是redis学习笔记

在这里插入图片描述

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com

热搜词