图解Redis适用场景

这篇具有很好参考价值的文章主要介绍了图解Redis适用场景。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

图解Redis适用场景

Redis以其速度而闻名。

1 业务数据缓存

1.1 通用数据缓存

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

图解Redis适用场景

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

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

1.2 实时热数据

最新N条数据

2 会话存储

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

图解Redis适用场景

图解Redis适用场景

当用户向应用程序发出请求时,请求中包含会话 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。

图解Redis适用场景

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

对于每个传入的请求,请求 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适用场景

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

可参考 https://www.runoob.com/redis/redis-stream.html图解Redis适用场景

6 分布式锁

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

图解Redis适用场景

工作原理

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

图解Redis适用场景

通过删除键来释放日志。现在,若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 发布!文章来源地址https://www.toymoban.com/news/detail-748287.html

到了这里,关于图解Redis适用场景的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 各类云产品功能,适用场景介绍

    1.容器服务CCS(cloud container service) 2.容器服务CKE(Chinaunicom Kubernetes Engine) 3.镜像仓库CCR() 4.对象存储COS(Cloud Object Storage,COS) 对象存储(Cloud Object Storage,COS)是腾讯云提供的一种存储海量文件的分布式存储服务,用户可通过网络随时存储和查看数据。腾讯云 COS 使所有用户都能

    2024年01月16日
    浏览(36)
  • es mysql 适用场景对比

    对枚举字段的搜索 mysql创建索引的原则是对于那些区别度高字段建立索引,区别度越高的索引,在数据量大的情况下,索引效果越好。 因为mysql建立b+树时是这样,每创建一行就新建立索引字段,如果需要对枚举类型的字段进行搜索的时候比如该字段是布尔型只有两种值,对

    2024年02月06日
    浏览(36)
  • Node.js 的适用场景

    目录 前言 适用场景 1. 实时应用 用法 代码 理解 代码示例 理解 3. 微服务架构 用法 代码示例 理解 总结 前言 Node.js 是一个基于 Chrome V8 引擎的 JavaScript 运行环境,它使得 JavaScript 可以脱离浏览器运行在服务器端。Node.js 的出现极大地扩展了 JavaScript 的应用范围,使得开发者

    2024年02月04日
    浏览(32)
  • 机械硬盘与固态硬盘的适用场景

    之前一直以为固态硬盘各方面都比机械硬盘性能高,所以首选固态硬盘,直到看了极客时间-深入浅出计算机组成原理中硬盘相关章节的内容,才发现固态硬盘原来是有缺点的,所以这里来做一个总结。 机械硬盘由以下几个部分组成: 盘面 :盘面(盘片)上有一层磁性涂层,

    2023年04月09日
    浏览(64)
  • 云计算和Docker分别适用场景

      在大规模网络爬虫系统中,通过使用云计算和Docker技术,可以实现大规模网络爬虫系统的高效架构设计和部署。这种架构能够提供可扩展性、高可用性和灵活性,为爬虫系统的运行和管理带来便利。 云计算和Docker在大规模网络爬虫系统中有不同的业务范围,那么我们该如何

    2024年02月11日
    浏览(32)
  • 金蝶云星空各种部署架构及适用场景分享

    随着公司的快速发展上市到进入世界500强,作为技术经理,负责了金蝶云·星空从单点部署到集群,再到替换SAP的过程,如今项目已经成功上线,所以对金蝶的相关知识也做下整理和归档。 在项目实施过程中,部署架构是非常重要的一个设计,否则面对不同的企业规模和业务

    2024年02月07日
    浏览(102)
  • 【MySQL】锁详解——从结构分类到适用场景

    我们要学习锁首先要了解下我们想了解的锁到底是什么🤔 而在MySQL中给某个数据加锁的本质其实就是 在内存中创建一个锁结构与之关联 ,而这个锁结构就是我们常提到的MySQL的锁🔒 那么接下来的问题就是,这个锁结构长啥样呢? 一张图详解锁结构( ̄∇ ̄)/  为了节约资源

    2023年04月10日
    浏览(29)
  • 使用Mybatis生成树形菜单-适用于各种树形场景

    开发中我们难免会遇到各种树形结构展示的场景。比如用户登录系统后菜单的展示,某些大型购物网站商品的分类展示等等,反正开发中会遇到各种树形展示的功能,这些功能大概处理的思路都是一样的,所以本文就总结一下树形结构的代码生成,在开发的时候套用这种结构

    2024年02月08日
    浏览(37)
  • 数学建模比赛题型划分、常用算法及其适用场景

    题型划分、常用算法及其适用场景 常见赛题类型 优化类 机理分析类 评价类 预测类 算法体系分类 数据处理模型 优化模型 预测模型 评价模型 聚类分析模型 常用算法分类 数据预处理模型及应用场景 1.插值拟合 主要用于对数据的补全处理; 其中 样本点较少时 (泛指样本点小

    2024年02月10日
    浏览(46)
  • kafka和rabbitmq之间的区别以及适用场景

    Kafka 和 RabbitMQ 都是流行的消息传递系统,用于实现分布式系统中的消息传递、事件处理和数据流。它们在设计和适用场景上有一些不同,下面详细介绍它们之间的区别和适用场景。 特点和优势: 高吞吐量: Kafka 的设计目标是实现高吞吐量和低延迟的消息传递,适合处理大量

    2024年02月13日
    浏览(34)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包