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

【Redis】 String类型的内部编码与使用环境

文章目录

  • 🍃前言
  • 🌴内部编码
  • 🎄典型使用场景
    • 🚩缓存功能
    • 🚩计数(Counter)功能
    • 🚩共享会话(Session)
    • 🚩验证码功能
  • ⭕总结

🍃前言

本篇文章重点内容如下:

  1. 了解String类型的三种内部编码
  2. 了解String类型的典型使用环境

🌴内部编码

虽然我们使用的是 String 类型的数据,但是Redis底层是如何存储的呢?

起始 Reids 对字符串类型的有三种内部编码方式:

  • int:8 个字节的⻓整型。
  • embstr:⼩于等于 39 个字节的字符串。
  • raw:⼤于39 个字节的字符串。

🎄典型使用场景

🚩缓存功能

缓存功能是⽐较典型的缓存使⽤场景,其中 Redis 作为缓冲层,MySQL 作为存储层,绝⼤部分请求的数据都是从 Redis 中获取。由于 Redis 具有⽀撑⾼并发的特性,所以缓存通常能起到加速读写和降低后端压⼒的作⽤

🚩计数(Counter)功能

许多应⽤都会使⽤ Redis 作为计数的基础⼯具,它可以实现快速计数、查询缓存的功能,同时数据可以异步处理或者落地到其他数据源。

例如视频⽹站的视频播放次数可以使⽤ Redis 来完成:⽤⼾每播放⼀次视频,相应的视频播放数就会⾃增 1。

🚩共享会话(Session)

⼀个分布式 Web 服务将⽤⼾的 Session 信息(例如⽤⼾登录信息)保存在各⾃的服务器中,但这样会造成⼀个问题:出于负载均衡的考虑,分布式服务会将⽤⼾的访问请求均衡到不同的服务器上,并且通常⽆法保证⽤⼾每次请求都会被均衡到同⼀台服务器上,这样当⽤⼾刷新⼀次访问是可能会发现需要重新登录,这个问题是⽤⼾⽆法容忍的。

为了解决这个问题,可以使⽤ Redis 将⽤⼾的 Session 信息进⾏集中管理,在这种模式下,只要保证 Redis 是⾼可⽤和可扩展性的,⽆论⽤⼾被均衡到哪台Web 服务器上,都集中从 Redis 中查询、更新 Session 信息。

🚩验证码功能

很多应⽤出于安全考虑,会在每次进⾏登录时,让⽤⼾输⼊⼿机号并且配合给⼿机发送验证码,然后让⽤⼾再次输⼊收到的验证码并进⾏验证,从⽽确定是否是⽤⼾本⼈。为了短信接⼝不会频繁访问,会限制⽤⼾每分钟获取验证码的频率,例如⼀分钟不能超过 5 次。此功能也可使用Redis来进行实现

伪代码实现如下:

String 发送验证码(phoneNumber) {key = "shortMsg:limit:" + phoneNumber;// 设置过期时间为 1 分钟(60 秒)// 使⽤ NX,只在不存在 key 时才能设置成功bool r = Redis 执⾏命令:set key 1 ex 60 nxif (r == false) {// 说明之前设置过该⼿机的验证码了long c = Redis 执⾏命令:incr keyif (c > 5) {// 说明超过了⼀分钟 5 次的限制了// 限制发送return null;}}// 说明要么之前没有设置过⼿机的验证码;要么次数没有超过 5 次String validationCode = ⽣成随机的 6 位数的验证码();validationKey = "validation:" + phoneNumber;// 验证码 5 分钟(300 秒)内有效Redis 执⾏命令:set validationKey validationCode ex 300;// 返回验证码,随后通过⼿机短信发送给⽤⼾return validationCode ;
}
// 验证⽤⼾输⼊的验证码是否正确
bool 验证验证码(phoneNumber, validationCode) {validationKey = "validation:" + phoneNumber;String value = Redis 执⾏命令:get validationKey;if (value == null) {// 说明没有这个⼿机的验证码记录,验证失败return false;}if (value == validationCode) {return true;} else {return false;}
}

⭕总结

关于《【Redis】 String类型的内部编码与使用环境》就讲解到这儿,感谢大家的支持,欢迎各位留言交流以及批评指正,如果文章对您有帮助或者觉得作者写的还不错可以点一下关注,点赞,收藏支持一下

http://www.lryc.cn/news/352897.html

相关文章:

  • HarmonyOS interface router scale pageTransition SlideEffect.Left ArkTS ArkUI
  • Go语言(Golang)的开发框架
  • Python入门第三课——Python 数据类型(详细)
  • html入门
  • 蓝桥杯杨辉三角
  • 【活动】开源与闭源大模型:探索未来趋势的双轨道路
  • 虚拟局域网(VLAN)
  • 内网穿透--Frp-简易型(速成)-上线
  • Python库之Scrapy的简介、安装、使用方法详细攻略
  • k8s配置pods滚动发布
  • C++vector的简单模拟实现
  • AWTK实现汽车仪表Cluster/DashBoard嵌入式GUI开发(七):快启
  • 基于springboot+vue的招聘信息管理系统
  • 使用STM32F103标准库实现自定义键盘
  • 面试八股之JVM篇3.5——垃圾回收——G1垃圾回收器
  • 解决LabVIEW通过OPC Server读取PLC地址时的错误180121602
  • npm,yarn,cnpm,tyarn,pnpm 安使用装配置镜像
  • 使用python将一段文本写入一个txt文件中且先格式化文件名
  • 前端 CSS 经典:元素倒影
  • ROS学习记录:用C++实现IMU航向锁定
  • 设计模式-策略模式-使用
  • WebSocket——相关介绍以及后端配置
  • 单片机设计注意事项
  • Ubuntu 如何根据NVIDIA显卡型号确定对应的显卡驱动版本并安装
  • 如何选择一款安全高效的数据自动同步工具?
  • 【linux】docker下nextcloud安装人脸识别插件
  • 2. C++服务器编程-信号
  • C#_库的引用
  • C++:STL—算法
  • 深入探索:移动云服务器的强大之处