图解Redis适用场景

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.mzph.cn/news/185444.shtml

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

相关文章

Make sure bypassing Vue built-in sanitization is safe here.

一、问题描述 二、问题分析 XSS(跨站脚本攻击) XSS攻击通常指的是通过利用网页开发时留下的漏洞,通过巧妙的方法注入恶意指令代码到网页,使用户加载并执行攻击者恶意制造的网页程序。这些恶意网页程序通常是JavaScript,但实际上也可以包括J…

【注册表】Sublime Text添加到右键菜单

官网下载 windows下地地址: http://www.sublimetext.com/download_thanks?targetwin-x64设置右键菜单和菜单小图标 win R打开运行,并输入regedit打开注册表编辑器依次找到HKEY_CLASSESS_ROOT -> * -> Shell,下面新建项, 这个项的名…

【TinyALSA全解析(三)】tinyplay、tincap、pcm_open源码解析

tinyplay、tincap、pcm_open源码解析 一、本文的目的二、tinyplay.c源码分析三、tinycap.c源码分析四、pcm.c如何调度到Linux Kernel4.1 pcm_open解析4.1.1 pcm_open的主要流程4.1.2 流程说明4.1.3 调用方法 4.2 pcm_write解析 /*********************************************…

图解系列--HTTPS,认证

确保 Web 安全的HTTPS 1.HTTP 的缺点 1.1.通信使用明文可能会被窃听 加密处理防止被窃听 加密的对象可以有这么几个。 (1).通信的加密 HTTP 协议中没有加密机制,但可以通过和 SSL(Secure Socket Layer,安全套接层)或TLS&#xff…

猜-MISC-bugku-解题步骤

——CTF解题专栏—— 题目信息: 题目:猜 作者:harry 提示: 解题附件:flag格式key{图中人物名字全拼} 解题思路: 这......头都没有,让我guess???详细信息看…

NASM安装和结合nodepad++进行编译的过程

mov ax,0x30 mov bx,0xc0 add ax,bx times 502 db 0 db 0x55 db 0xAA nasm安装地址: https://www.nasm.us/ 下载exe安装 在命令行提示符输入nasm编译命令 nasm exam.asm -f bin -o exam.bin 此时输入回车将会执行编译过程。 1,启动NotePad,在菜单上选…

web前端tips:js继承——寄生组合式继承

上篇文章给大家分享了 js继承中的 寄生式继承 web前端tips:js继承——寄生式继承 今天给大家分享一下 js 继承中的 寄生组合式继承 寄生组合式继承 寄生组合式继承是一种结合了寄生式继承和组合式继承的方式,它的目标是减少组合式继承中多余的调用父…

【Java 并发编程】进程线程、lock、设计模式、线程池...

博主:_LJaXi Or 東方幻想郷 专栏: Java | 从入门到入坟 Java 并发编程 并发编程多线程的入门类和接口线程组和线程优先级线程的状态及主要转化方法线程间的通信重排序和 happens-beforevolatilesynchronized 与锁CAS 与原子操作AQS计划任务Stream 并行计…

开放式耳机哪个品牌好用?超好用的耳机推荐,新手小白必看

在当今数不胜数的音频品牌中,寻找一款优秀的开放式耳机成为了许多音乐爱好者和新手小白的共同关注点,开放式耳机以其通透的音质和舒适的佩戴感受受到了广泛好评,但市场上的选择却让人眼花缭乱, 为了帮助新手小白在这个耳机的海洋…

从零开始:打造自己的抖音核销工具小程序

对于商家而言,如何高效核销活动中的抖音优惠券成为一项挑战。在这篇文章中,我们将探讨如何从零开始,打造一个个性化、高效的抖音核销工具小程序。 第一步:明确需求和目标 在动手之前,我们需要明确自己的需求和目标。…

ICC2:使用analyze_lib_cell_placement检查lib cell的pass rate

我正在「拾陆楼」和朋友们讨论有趣的话题,你⼀起来吧? 拾陆楼知识星球入口 在place之前需要使analyze_lib_cell_placement命令去检查lib cell在当前的site row/power plan/legalize设置的环境下能够正常place和legalize。 下面分享一个脚本去报告pass rate低于2%的lib cell…

【Amazon】安装Cloudwatch代理监控EC2

文章目录 一、实验概要二、实验操作步骤2.1 创建 CloudWatch 代理运行角色2.2 安装 CloudWatch 代理软件包2.3 使用 CloudWatch代理收集指标2.4 CloudWatch指标收集确认 三、参考链接 一、实验概要 使用 CloudWatch 代理从 Amazon EC2 实例和本地服务器中收集指标、日志和跟踪信…

AI模特换装的前端实现

本文作者为 360 奇舞团前端开发工程师 随着AI的火热发展,涌现了一些AI模特换装的前端工具(比如weshop网站),他们是怎么实现的呢?使用了什么技术呢?下文我们就来探索一下其实现原理。 总体的实现流程如下&am…

笔记二十六、React中路由懒加载的扩展使用

26.1 在路由中配置懒加载 lazy routes/index.jsx 代码 import {Navigate} from "react-router-dom"; import Home from "../components/Home"; import About from "../components/About"; // import Classify from "../components/Home/c…

自动化测试框架搭建步骤教程

说起自动化测试,我想大家都会有个疑问,要不要做自动化测试? 自动化测试给我们带来的收益是否会超出在建设时所投入的成本,这个嘛别说是我,即便是高手也很难回答,自动化测试的初衷是美好的,而测试…

CAD精品Eyeshot Fem 2023.3.630 -2023-11-05 Crack

2023.3.630 更新25天前 分享 跟随还没有人关注 改进的 Brep.TransformBy() 方法修复了工具栏内存泄漏修复了 glTF 材质导出期间的异常改进了 glTF 材质金属粗糙度设置修复了渐进式绘图和剪辑平面的错误在 Workspace.UseShaders 属性设置器中添加了缺少的 RenderContext.MakeCur…

Vue+ElementUI+C#技巧分享:周数选择器

文章目录 前言一、周数的计算逻辑1.1 周数的定义1.2 年初周数的确定1.3 周数的计算方法 二、VueElementUI代码实现2.1 计算周数2.2 获取周的日期范围2.3 根据周数获取日期范围2.4 控件引用2.4.1 控件引用代码分析2.4.2 初始化变量代码分析 2.5 周数选择器完整代码 三、C#后端代…

Vue大屏自适应终极解决方案

v-scale-screenv-scale-screen是一个大屏自适应组件,在实际业务中,我们常用图表来做数据统计,数据展示,数据可视化等比较直观的方式来达到一目了然的数据查看,但在大屏开发过程中,常会因为适配不同屏幕而感…

sklearn 笔记:聚类

1 sklearn各方法比较 方法名称参数使用场景K-means簇的数量 非常大的样本数 中等簇数 簇大小需要均匀 Affinity Propagation 阻尼系数 样本偏好 样本数不能多 簇大小不均 MeanShift带宽 样本数不能多 簇大小均匀 谱聚类簇的数量 中等样本数 小簇数 簇大小均匀 层次聚类簇的数量…

职业测评链接

职业测评链接: https://www.16personalities.com/ch?utm_sourceresults-turbulent-campaigner&amp%3Butm_mediumemail&amp%3Butm_campaignch&amp%3Butm_contentlogo-0