图解Redis适用场景

news2024/12/26 12:29:35

Redis以其速度而闻名。

1 业务数据缓存

1.1 通用数据缓存

string,int,list,map。Redis 最常见的用例是缓存对象以加速 Web 应用程序。

此用例中,Redis 将频繁请求的数据存储在内存。允许 Web 服务器快速返回频繁访问的数据。这减轻数据库的负载并提高应用程序RT。

规模扩张时,缓存分布在 Redis 服务器集群中。分片可平均分配集群中的缓存负载。

1.2 实时热数据

最新N条数据

2 会话存储

在无状态服务器之间共享会话数据。当用户登录 Web 应用程序时,会话数据与唯一会话 ID 一起存储在 Redis并作为 cookie 返给客户端。

当用户向应用程序发出请求时,请求中包含会话 ID,无状态 Web 服务器使用 ID 从 Redis 检索会话数据。

风险

若 Redis 服务器重启,则存储在 Redis 中的会话数据丢失。尽管 Redis 通过RDB和 AOF 或仅追加文件提供持久性,它们允许将会话数据保存到磁盘并在重启事件中重新加载到内存。但这些选项在生产通常需要太长时间加载,并不实用。相反,在这种情况下使用复制。数据复制到备份实例。在主实例崩溃时,备份实例会很快被提升以接管流量。

Redis 会话存储 V.S JWT 技术

各有优势,选择取决于具体的应用场景和需求:

  1. 安全性:JWT 更加安全,因为它不需要服务器端存储会话数据,全部的数据可以通过加密的 JWT 编码在客户端;而 Redis 存储在服务器端,如果 Redis 被攻击可能会洩漏会话数据。

  2. 伸缩性:Redis 会话存储更易水平扩展,通过集群可以很好的承载大量会话;JWT 需要应用层进行扩展。

  3. 实现难度:Redis 会话存储实现简单,直接利用 Redis API 即可;JWT 需要选用算法和密钥,客户端和服务端都需要一些代码实现。

  4. 跨域访问:JWT 更适合跨域场景,因为可以直接在请求头中携带。Redis只能在同域下访问。

  5. 适用场景:

    • 需要 sessions 的场景更适合 Redis 会话存储,比如要跟踪用户状态的 web 应用。
    • 对安全性要求高的 API、跨域应用更适合 JWT。
    • 如果是内部系统或者对安全要求不高,Redis会话存储就足够了。

所以,你需要根据应用的具体场景、安全性需求、实现成本等因素权衡考虑,选择更适合的会话管理方案。两者也可以结合使用。

3 全局一致计数

全局流控计数(Rate Limiter)

简单的限流组件,但有问题,不建议使用。还是要用滑动窗口算法。

使用其在某些计数器上递增命令并为这些计数器设置到期时间来用作Rate Limiter。

基本的速率限制算法的工作原理

对于每个传入的请求,请求 IP 或用户ID 作K。

使用incr 命令递增K的请求数。 将当前计数与允许的速率限制比较:

  • 若计数在速率限制内,则处理请求
  • 若计数超过限制,则拒绝请求

K被设置为在特定时间窗口内过期,如 1min,以便为下一时间窗口重置计数。

诸如漏桶算法类的更复杂Rate Limiter也可用 Redis 实现。

秒杀的库存计算

抢红包

全局唯一ID

4 高效的统计计数

  • id去重 记录访问ip等全局bitmap操作
  • UV、PV等访问量 非严格一致性要求

5 发布订阅与Stream

Pub-Sub 模拟队列 subscribe comments publish comments java

Redis Stream 是 Redis 5.0 版本新增加的数据结构。 Redis Stream 主要用于MQ。

可参考 https://www.runoob.com/redis/redis-stream.html![](https://img-blog.csdnimg.cn/0b82e2ceabc6492484a15ded873e8dfb.png)

6 分布式锁

当应用程序中的多个节点需要协调对某些共享资源的访问时,使用分布式锁。 Redis 用作分布式锁,具有原子命令如 SETNX 或如果不存在则设置,使得caller只在K不存在时才能设置K。

工作原理

Client 1试图通过使用 SETNX 命令设置具有唯一值和TTL的K来获取锁。如果该K尚未设置,则 SETNX 返回1表示锁已被Client 1获得。Client 1完成其工作。

img

通过删除键来释放日志。现在,若K已设置,SETNX返回 0,表示锁已经被另一客户端持有。此时,Client 1会等待并重试 SETNX 操作,直到另一个客户端释放该锁。

对许多用例来说,这个简单的实现可能就足够好了,但它对生产使用来说不是完全容错。许多 Redis 客户端库提供直接开箱即用的高质量分布式锁实现。

获取锁 原子性操作

SET dlock my_random_value NX PX 30000

释放锁,lua脚本,保证原子性+单线程,从而具有事务性

if redis.call("get",KEYS[1]) == ARGV[1] then 
    return redis.call("del",KEYS[1]) 
else 
    return 0 
end 

7 业务数据处理

  • 非严格一致性要求的数据:评论,点击等
  • 业务数据去重:订单处理的幂等校验等
  • 业务数据排序:排名,排行榜等

    本文由博客一文多发平台 OpenWrite 发布!

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

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

相关文章

vue day2

1、指令修饰符:.指明一些指令后缀,不同后缀封装不同处理操作 按键修饰符:keyup.enter v-model修饰符: v-model.trim:去首位空格 v-model.number:转数字 事件修饰符: 阻止事件冒泡&#xff1…

机器人制作开源方案 | 网球自动拾取机

作者:柳文浩、李浩杰、苏伟男、贾思萌、张天芸 单位:西安外事学院 指导老师:胡宝权、陈小虎 1. 产品说明 1.1 设计目的 近年来,网球运动越来越受到老百姓的欢迎,各种规模的比赛层出不穷。然而由于网球运动极为激烈…

滴滴昨晚崩了,看这波还敢不敢降本增效?

起因 截至 2023 年 11 月 27 日晚,中国最大的网约车服务平台滴滴打车遭遇系统崩溃,继阿里云控制台故障之后,再次引发热议。这一事件迅速攀升至热搜榜首,引起广泛关注。 今晚约 10 点,滴滴打车遭遇大范围技术故障。用户…

Spring的三种常见Bean的初始化参数机制,你都用对了吗?

大家好,我是G探险者。 spring这本九阳神功秘籍,我们一点一滴去研读。 在Spring框架中,Bean的实例化与初始化是一个复杂的过程,一个Bean的实例化过程往往伴随着一些属性的初始化动作,有的是在Bean实例化之后才进行的属…

解决VMware VCenter存储上传镜像文件失败

VMware VCSA6.7上传共享文件时提示操作失败,由于不确定的原因,操作失败。通常,当浏览器不信任证书时会发生此问题。如果您使用的是自签名证书或自定义证书,请在新的浏览器选项卡中打开下面的 URL并接受证书,然后重试操…

五、Lua流程控制与函数

一、流程控制 (一)含义 Lua 编程语言流程控制语句通过程序设定一个或多个条件语句来设定。在条件为 true 时执行指定程序代码,在条件为 false 时执行其他指定代码。 (二)原型 if (成立) then执行体1else执行体2 end…

蓝桥杯每日一题2023.11.27

题目描述 星系炸弹 - 蓝桥云课 (lanqiao.cn) 题目分析 对于此题目一一枚举即可 #include<bits/stdc.h> using namespace std; bool is_r(int n) {if((n % 4 0 && n % 100 ! 0)|| n % 400 0)return true;return false; } int mm[13] {0, 31, 28, 31, 30, 3…

智能优化算法应用:基于樽海鞘群算法无线传感器网络(WSN)覆盖优化 - 附代码

智能优化算法应用&#xff1a;基于樽海鞘群算法无线传感器网络(WSN)覆盖优化 - 附代码 文章目录 智能优化算法应用&#xff1a;基于樽海鞘群算法无线传感器网络(WSN)覆盖优化 - 附代码1.无线传感网络节点模型2.覆盖数学模型及分析3.樽海鞘群算法4.实验参数设定5.算法结果6.参考…

图像分类任务

本文记录 北京邮电大学 计算机学院的学习记录 什么是图像分类任务&#xff1f; 图像分类任务是计算机视觉中的核心任务&#xff0c;其目 标是根据图像信息中所反映的不同特征&#xff0c;把不同类别 的图像区分开来 图像分类任务有哪些难点呢&#xff1f; 语义鸿沟视角变化…

【springboot】宝塔简单部署springboot 配置https

宝塔简单部署springboot配置https 需求步骤1. springboot通过maven组件打成jar包2. 将jar包部署到宝塔上3. 下载安装nginx并创建网站节点4. 设置域名或者IP5. 设置反向代理:代理后端服务的ip和端口7. 配置SSL/TLS 需求 宝塔部署springboot项目,用nginx反向代理后端IP端口&…

用Elasticsearch搜索匹配功能实现基于地理位置的查询

1.Redis,MongoDB,Elasticsearch实现地理位置查询比较 1.1 Redis: 优点&#xff1a;Redis提供了地理空间索引功能&#xff0c;可以通过Geo数据类型进行地理位置查询。这使得Redis在处理地理位置查询时非常高效。 缺点&#xff1a; Redis的地理空间索引功能相对简单&#xff0…

【单调栈】最大宽度坡

public int maxWidthRamp(int[] nums) {/* 此方法思路正确&#xff0c;但超时int n nums.length;Deque<Integer> stack;int max 0;for (int i 0; i < n; i) {stack new LinkedList<>();stack.push(nums[i]);int j i 1;while (j < n) {stack.push(nums…

华为拆分零部件业务,长安入股,赛力斯接洽中

作者 |德新 编辑 |王博 11月26日&#xff0c;长安汽车官宣与华为在智能汽车零部件业务上的投资与合作&#xff1a; 华为拟成立一家新的公司&#xff0c;并将其在智能汽车解决方案业务上的核心技术和资源注入新公司&#xff0c;长安汽车及关联方有意投资该新公司。 参照目前长…

如何保护PPT文件禁止修改?

PPT文件会应用在会议、演讲、课件等工作生活中&#xff0c;当我们制作好了PPT之后&#xff0c;保护内容防止在演示时出错是很重要的&#xff0c;那么如何将PPT文件设置成禁止修改模式呢&#xff1f;今天分享几个方法给大家。 方法一 将PPT文件直接保存或者另存为一份文件&…

Gitea和Jenkins安装

Gitea Gitea&#xff1a;https://dl.gitea.com/gitea/1.21.0/ Jenkins&#xff1a;https://www.jenkins.io/download/ 数据库配置 可以参考官方文档-https://docs.gitea.cn/1.20/installation/database-prep&#xff0c;这里以MySQL作为讲解 MySQL 在数据库实例上&#xf…

小航助学题库蓝桥杯题库stem选拔赛(21年1月)(含题库教师学生账号)

需要在线模拟训练的题库账号请点击 小航助学编程在线模拟试卷系统&#xff08;含题库答题软件账号&#xff09;_程序猿下山的博客-CSDN博客 需要在线模拟训练的题库账号请点击 小航助学编程在线模拟试卷系统&#xff08;含题库答题软件账号&#xff09;_程序猿下山的博客-CSD…

电子学会C/C++编程等级考试2022年03月(三级)真题解析

C/C++等级考试(1~8级)全部真题・点这里 第1题:和数 给定一个正整数序列,判断其中有多少个数,等于数列中其他两个数的和。 比如,对于数列1 2 3 4, 这个问题的答案就是2, 因为3 = 2 + 1, 4 = 1 + 3。 时间限制:10000 内存限制:65536输入 共两行,第一行是数列中数的个数…

使用vscode中编写c语言——无法打开 源 文件 “stdlib.h“C/C++(1696)问题

出现这个问题原因如下&#xff1a; 1、没有下载编辑器或者是没有配置好该编辑器的环境变量。 可以通过如下方法检查是否安装并配置好编辑器&#xff1a;打开终端&#xff1a;按winR cmd&#xff0c;然后输入gcc-v&#xff0c;查看是否有mingw64编辑器&#xff0c;如下图是已经…

HNU 练习八 结构体编程题1. 评委打分

【问题描述】 校园卡拉OK比赛设置了7名评委&#xff0c;当一名选手K完歌之后&#xff0c;主持人报出歌手名字后&#xff0c;7位评委同时亮分&#xff0c;按照惯例&#xff0c;去掉一个最高分和一个最低分后&#xff0c;其余5位评委评分总和为该选手的最终得分。 一共有n组选手参…

【面试题】JavaScript高级循环方法

给大家推荐一个实用面试题库 1、前端面试题库 &#xff08;面试必备&#xff09; 推荐&#xff1a;★★★★★ 地址&#xff1a;web前端面试题库 除了for循环♻️&#xff0c;for-of,for-each循环♻️也是一个不错的选择 先说for-of循环♻️ 认识for-of循环♻️…