Redis實現MQ

MQ的提出

上游發出請求后阻塞等待下游給到反饋,否則整個流程將一直阻塞。
提出mq之后:即有producer mq consumer 三者


MQ的特點

異步解耦
在有了 mq 后,producer 不需要過分關心 consumer 的身份信息,只需要把消息按照指定的協議投遞到對應的 topic 即可
producer 在處理請求時,只需要把消息投遞到 mq 即可認為流程處理結束,相比于同步請求下游,整個流程會更加輕便靈活,擁有更高的吞吐量
流量削峰
因為有 mq 作為緩沖層. 下游 consumer 可以設定好合適的消費限流參數,按照指定的速率進行消費,能夠在很大程度上對 consumer 起到保護作用

Redis自身的缺點(無論是做緩存還是做mq都存在的)
價格昂貴:redis本身是基于內存的,相比傳統的mq組件是基于磁盤的。因此總容量可能有限。
存在數據丟失:即使有RDB/AOF的持久化策略,也難免存在數據丟失的問題,因為這個持久化是異步執行的,只要是異步,都不能說它是百分百的。

Redis自身的優點:
輕量,部署方便,運維成本低。


基于List實現的消息隊列

首先,在使用 list 充當消息隊列時,list 對應的 key 則對應為消息的 topic 名稱.
producer 在投遞消息時,可以使用 lpush 指令
consumer 消費消息時,使用 rpop 指令
但是存在一定的缺陷:

首先,consumer 在消費時,一定是一個類似于 loop thread 的自旋模型,每一輪循環中,通過 rpop 指令嘗試從 list 中讀取消息,如果成功讀取到了消息,則進行相應的邏輯處理.
然而在此處,redis 的 rpop 指令是非阻塞型的,即在 list 沒有數據時,也會即時返回一個結果為 nil 的響應,這樣在自旋模型下,對CPU是一筆不小的損耗。

倘若我們在 rpop 捕捉到 nil 時,立即開啟下一輪循環,則這個輪詢行為可能是沒有意義的,因為 list 中可能仍然不存在數據. 這樣的高頻率自旋,對于 cpu 資源是一種無謂的損耗
倘若我們選擇讓 consumer 休眠一段時間進行循環,這個休眠的時長又具有一定的人為誤判性. 倘若我們把時長設得太短,仍然會存在 cpu 浪費的問題;倘若設得太長,則可能會導致消息處理不及時的問題

在這個過程中,最理想的實現方案是,在 list 中有數據到達時,我們令 consumer 即時獲取到對應的結果;倘若 list 數據為空,則令 consumer 陷入阻塞等待的狀態,直到有數據抵達時程序才被喚醒.?
推出阻塞等待機制:
BRPop key 【阻塞等待的超時時長】
達到此閾值仍未獲取數據時會返回 nil. 如果設置為 0 ,則代表沒有這個超時限制.


基于Pub/Sub


?

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/web/15242.shtml
繁體地址,請注明出處:http://hk.pswp.cn/web/15242.shtml
英文地址,請注明出處:http://en.pswp.cn/web/15242.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

Python 潮流周刊#52:Python 處理 Excel 的資源

本周刊由 Python貓 出品,精心篩選國內外的 250 信息源,為你挑選最值得分享的文章、教程、開源項目、軟件工具、播客和視頻、熱門話題等內容。愿景:幫助所有讀者精進 Python 技術,并增長職業和副業的收入。 本期周刊分享了 12 篇文…

基于hive的酒店價格數據可視化分析系統設計和實現

摘要 本文基于Django框架和Hive技術,設計和實現了一種酒店價格數據可視化分析系 統,旨在為酒店管理者提供直觀、清晰的數據洞察和決策支持。在研究中,首先深入分 析了酒店價格數據可視化分析系統的背景和意義,認識到對于酒店行…

3.Redis之Redis的環境搭建redis客戶端介紹

1.版本的選取 安裝 Redis:Redis 5 系列~~ 在 Linux 中進行安裝~~ Redis 官方是不支持 Windows 版本的~~ 微軟維護了一個 Windows 版本的 Redis 分支 Centos和Ubuntu.Docker 2.如何進行安裝??? 1.ubuntu 2.centos yum instal…

arcgisPro將一個圖層的要素復制到另一個圖層

1、打開兩個圖層,如下,其中一個圖層中有兩個要素,需要將其中一個要素復制到另一個圖層中,展示如下: 2、選中待復制要素,點擊復制按鈕,如下: 3、下拉粘貼按鈕列表,選擇【選…

利用oracle默認事務隔離級別(提交讀)提升多表聯查速度

利用oracle默認事務隔離級別(提交讀)提升查詢速度) 背景介紹: 數據量大查詢緩慢,添加太多條件,使用IN走了全表查詢導致查詢速度緩慢。 解決方案: 版本一: 新建臨時表,在查詢是將數據插入到臨時表中&#…

Python 根據點云索引提取點云

點云索引濾波 一、介紹1.1 概念1.2 參數設置二、代碼示例三、結果示例一、介紹 1.1 概念 點云索引濾波 是一種常用的點云濾波方法,根據給定的索引列表獲取點云中的索引點,或著根據給定的索引列表獲取點云中的非索引點。 1.2 參數設置 核心函數: def select_by_index(self, …

Ubuntu22.04虛擬機設置靜態IP

虛擬機設置靜態IP 按下電腦的 “win”鍵,在彈出的輸入框中輸入“控制面板”,選中控制面板 1.選擇 “網絡和Internet” 2.選擇 “網絡和共享中心” 3.選擇 “更改適配器設置” 4.選擇 “VMnet8”,雙擊打開 5.選擇 “屬性” 找到 “Internet …

【idea】idea2024最新版本下載_安裝_破解

1、下載 下載地址:下載 IntelliJ IDEA – 領先的 Java 和 Kotlin IDE 下載完成: idea破解腳本下載鏈接:https://pan.baidu.com/s/1L5qq26cRABw8XuEn_CngKQ 提取碼:6666 下載完成: 2、安裝 1、雙擊idea的安裝包&…

《計算機網絡微課堂》1-6 計算機體系結構

常見的計算機網絡體系結構 從本節課開始,我們要用 4 次課的時間來介紹有關計算機網絡體系結構的知識,具體包含以下內容: 一,常見的計算機網絡體系結構二,計算機網絡體系結構分層的必要性三,計算機網絡體系…

給我瞅瞅呀

專業 流程(一條龍服務) 需求溝通-需求分析-產品架構-ue原型-ui設計-產品研發-產品測試-產品交付-產品運維 保障 1、按需定制,簽訂功能清單,根據功能報價 2、價格透明,簽訂合同保障,保障客戶合法權益 3、源…

python(4) : pip安裝使用國內源

pip install -i https://pypi.tuna.tsinghua.edu.cn/simple requests

低代碼應用:云原生與Kubernetes的應用實戰

隨著云原生技術的發展,低代碼開發平臺(Low-Code Development Platforms, LCDPs)在企業級應用開發中扮演著越來越重要的角色。本文將探討低代碼平臺如何與Kubernetes結合,實現高效、靈活且可擴展的企業級應用開發。 低代碼平臺概述…

監控員工電腦屏幕的五大軟件(電腦監控軟件大盤點)

監控員工電腦屏幕是企業為了提升工作效率、確保信息安全和合規性而采取的一種常見做法。以下是五款在2024年備受推薦的員工電腦屏幕監控軟件,每款軟件都具有其獨特的功能和優勢: 1. 域智盾 域智盾是一款全面的終端管理系統,集成了實時屏幕監…

動態代理,反射,注解的復習筆記

1.動態代理的作用 動態代理最主要的用途就是在各種框架中,很方便的在運行期間生成代理類,通過代理類就可以完成AOP、過濾器、攔截器等操作 (注:代理就是被代理者沒有能力或者不愿意去完成某件事情,需要找個人代替自己…

02.爬蟲---HTTP基本原理

02.HTTP基本原理 1.URI 和 URL 的區別2.HTTP 和 HTTPS 的區別3.請求過程 1.URI 和 URL 的區別 URL(Uniform Resource Locator)即-統一資源定位符 URL是用來定位和訪問互聯網上資源的獨特標識,它包括了資源的位置(如IP地址或域名&a…

移動硬盤難題:不顯示容量與無法訪問的解決策略

在使用移動硬盤的過程中,有時會遇到一些棘手的問題,比如移動硬盤不顯示容量且無法訪問。這種情況讓人十分頭疼,因為它不僅影響了數據的正常使用,還可能導致重要數據的丟失。接下來,我們就來詳細探討一下這個問題及其解…

CentOS 7安裝/卸載Grafana

說明:本文介紹CentOS 7操作系統如何安裝/卸載Grafana; 安裝 Step1:下載rpm文件 敲下面的命令,下載grafana的rpm文件 wget https://dl.grafana.com/oss/release/grafana-7.3.7-1.x86_64.rpmStep2:安裝grafana 敲下…

使用xxl-job-executor-go 接入xxl-job實現定時任務調度

定時任務是軟件開發中很常見的一種處理業務的機制,xxl-job是近些年比較火的定時任務調用組件,其采用java 實現,是一個高可用,分布式調用的組件,還支持多種定時任務有關的特性,不僅能輕易的用java 客戶端接入…

SpringBoot高級原理詳解

今日內容: 理解SpringBoot自動化配置源碼理解SpringBoot健康監控 1 SpringBoot自動化配置原理 01-SpringBoot2高級-starter依賴管理機制 目的:通過依賴能了解SpringBoot管理了哪些starter講解: 通過依賴 spring-boot-dependencies 搜索 …

【C++】<知識點> 標準模板庫STL(上)

文章目錄 一、STL---string類 1. 常用構造函數 2. 常用操作 3. 字符串流處理 二、STL---容器 1. STL及基本概念 2. 順序容器簡介 3. 關聯容器簡介 4. 容器適配器簡介 5. 常用成員函數 三、STL---迭代器 1. 普通迭代器 2. 雙向、隨機訪問迭代器 3. 不同容器的迭代器…