Redis 除了用作缓存还能干吗?

Redis 除了用作缓存还能干吗?

文章出自 ByteByteGo 公众号,如有侵权,请联系立即删除

Redis 是一种内存键值数据库。它支持多种数据结构,如 String, Hash, List, Set 和 SortedSet。

在这里插入图片描述

01 缓存

Redis 的最常用的用例是缓存,以加快网络应用的速度。在这种用例中,Redis 将经常请求的数据存储在内存中。它允许网络服务器频繁访问的数据。这就减少了数据库的负载,并缩短应用程序的响应时间。在大规模应用中,缓存分布在 Redis 服务器集群中。

Redis 作为分布式缓存时需要考虑的其他问题包括:

  • 设置正确的 TTL (Time to Live)
  • 处理冷启动时对数据库的密集访问

02 Session 存储

另一个常见用例是将 Redis 用作 Session 存储,在无状态服务之间共享 Session 数据。

当用户登录网络应用程序时,服务端会创建一个唯一的 Session ID,Session 数据会存储在 Redis 中,然后 Session 作为 Cookie 的一部分返回给客户端。

当用户向应用程序发出请求时,Session ID 会包含在请求中。无状态网络服务器会使用 Session 数据。值得注意的是 Redis 是内存数据库。如果 Redis 服务器重启,存储在 Redis 中的 Session 数据会丢失。

即使 Redis 提供了 RDB 和 AOF 等持久化选项,但这些选项在重启时加载数据的时间往往太长,不实用。在实际生产环境中,数据会复制到备份实例。如果主实例崩溃,备份迅速升级,接管流量。

03 分布式锁

需要协调对某些共享资源的访问时,就会使用分布式锁。Redis 通过其原子命令(如 SETNX, SET if Not eXists)来做分布式锁。它允许调用者设置一个不存在的键。

比如,客户端通过设置一个唯一的 Key 来获取锁:

SETNX lock "1234abcd" EX 3

如果 Key 尚未设置,SETNX 命令返回 1,表明锁已被客户端获取。客户端完成工作后 删除 Key ,释放锁。

如果 Key 已被设置,SETNX 命令返回 0,表明锁已被其他客户机持有。在这种情况下,客户端会等待并重试 SETNX 操作,直到锁被其他客户端释放。

请注意,这种简单的实现对于许多用例来说已经足够好了,但并非完全容错。对于生产应用,许多 Redis 客户端库提供高质量的分布式锁实现。

04 限流

Redis 可用作限流。一个非常基本的限流算法是这样工作的:

对于每个用户请求,其请求的 IP 或用户 ID 用作 Key。每个请求都会使键值递增。将当前计数与允许的速率限制进行比较,如果计数在速率限制范围内,则处理请求。如果计数超过速率限制,则拒绝请求。Key可以设置为在特定时间窗口(如一分钟)后过期,以重置下一个时间窗口的计数。

05 游戏排行榜

对于大多数规模不是很大的游戏来说,Redis 是一种很好的实现方式。SortedSet 是实现这一功能的基本数据结构。

SortedSet 的每个元素都有一个与之相关的分数。元素按分数排序。这样就可以在对数时间内 完成排序。

06 购物车

我们可以使用 Hash 来表示购物车中的键值对。对于简单的电商平台来说,在 Redis 中实现购物车可以兼顾用户体验和快速交付。

07 计算用户留存率

我们可以使用 Bitmap 来表示每天登录的用户并计算用户保留率。这种计数功能占用的内存很少。

08 消息队列

我们可以使用 List 来做消息队列。也可以使用 Redis 的 PubSub 功能来实现类似的消息总线功能。

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

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

相关文章

服务器监控软件夜莺部署(一)

文章目录 一、夜莺介绍1. 简介2. 相关网站 二、夜莺部署1. 部署架构2. Docker启动3. 配置数据源4. 内置仪表盘效果5. 时序指标效果 一、夜莺介绍 1. 简介 夜莺监控系统是一款专业的服务器监控软件,它可以帮助用户实时监测服务器的CPU、内存、磁盘利用率等。 夜莺监…

【代数学作业1完整版-python实现GNFS一般数域筛】构造特定的整系数不可约多项式:涉及素数、模运算和优化问题

代数学作业1-完整版:python实现GNFS一般数域筛 写在最前面背景在GNFS算法中选择互质多项式时,需要考虑哪些关键因素,它们对算法的整体运行时间有何影响? 练习1题目题目分析Kleinjung方法简介通用数域筛法(GNFS)中的多…

初识网络安全

​ 前言 网络安全是指保护计算机网络和网络上的数据免受未经授权的访问、使用、泄露、破坏和干扰的一系列措施和技术。在当今数字化时代,网络安全变得尤为重要,因为我们越来越依赖互联网和计算机网络进行各种活动,如通信、数据传输、金融交…

注册 Mongodb 官网个人账号

上文 Mongodb基础介绍与应用场景我们简单说了一下 Mongodb 的场景 那么 我们先在他的官网创建一个个人账号 我们先访问官网 https://www.mongodb.com/zh-cn 这里 我们需要注册一下 这里 我们按要求填写信息 然后 点击下面创建账户 然后 点击下面创建账户 然后 他会要求我们邮…

bootstrap5开发房地产代理公司Hamilton前端页面

一、需求分析 房地产代理网站是指专门为房地产行业提供服务的在线平台。这些网站的主要功能是连接房地产中介机构、房产开发商和潜在的买家或租户,以促成买卖或租赁房产的交易。以下是一些常见的房地产代理网站的功能: 房源发布:房地产代理网…

图论及其应用(匈牙利算法)---期末胡乱复习版

目录 题目知识点解题步骤小结题目 T1:从下图中给定的 M = {x1y4,x2y2,x3y1,x4y5},用 Hungariam算法【匈牙利算法】 求出图中的完美匹配,并写出步骤。 知识点 关于匈牙利算法: 需要注意的是,匈牙利算法仅适用于二分图,并且能够找到完美匹配。什么是交替路?从一个未匹…

Elsevier的Rights and Access填写注意事项(图文)

Elsevier的Rights and Access填写注意事项(图文) Elsevier的Rights and Access在填写时只需打开通信作者邮箱里的链接,进去选择即可,本文主要介绍了填写时的每步的注意事项。 流程如下 点击链接网页中该部分Complete the Rights …

git使用(完整流程)

1. 新建仓库 1.右击 git bash 后 输入 git init (仓库为:当前目录) git init name (仓库为:name文件夹) git clone https://github.com/Winnie996/calculate.git //https2.工作区域 工作目录 3. 添加 提交 git add . //工作区添加至暂存区 git commit -m "注释内容&q…

详解动态顺序表

𝙉𝙞𝙘𝙚!!👏🏻‧✧̣̥̇‧✦👏🏻‧✧̣̥̇‧✦ 👏🏻‧✧̣̥̇:Solitary-walk ⸝⋆ ━━━┓ - 个性标签 - :来于“云”的“羽球人”。…

复兴计划01-lc06

StringBuilder和StringBuffer的区别 1. StringBuffer和StringBuilder都是用于字符串动态拼接,但是StringBuffer拼接的函数方法的实现中用了synchornized上锁,效率较低,不过可以用于多线程以此来维护线程安全;相比之下,StringBuil…

odoo17后台启动过程4——odoo.http.root

在上一篇文章中,我们再启动server的时候传入了一个对象odoo.http.root,看看这是何方神圣 odoo\http.py 这里定义了Application类, 二root是这个类的一个实例,注释说这是WSGI网关的入口点。通过调试跟踪,也确定了 odoo…

线程池的两种提交方式

线程池是一种并发编程的机制,用于管理和重用线程,以提高应用程序的性能和效率。Java中的ExecutorService是线程池的一个接口,它提供了两种主要的方法来提交任务:execute()和submit()。 1. execute() 方法: void execut…