Redis是什么?架構是怎么樣的?

目錄

前言

一,Redis架構

1.1 本地緩存

1.2 遠程緩存

二,強大的Redis優點

2.1 支持多種數據類型

2.2 內存過期策略

2.3 內存淘汰策略

2.4 持久化

三,Redis是什么


前言

我是一個程序員,維護了一個商品服務,它的背后直連Mysql數據庫,假設商品服務對外每秒需要提供1萬次查詢,但背后的mysql每秒只能提供每秒5K次的查詢,那mysql肯定頂不住,分分鐘壓垮,這種大流量場景很常見,比如雙十一購物,春節搶車票.

那么問題來了?有沒有什么辦法在Mysql不被壓垮的同時,讓商品服務支持每秒!萬次的查詢?當然有!沒有什么是加一層中間層不能解決的,如果有,那就再加一層,這次我們要加的中間層就是Redis.

一,Redis架構

我們知道查詢內存的速度要比查詢磁盤要快,Mysql的數據主要存放在磁盤里,如果能將Mysql的數據放在內存里,完全不走磁盤,那必然能大大提升查詢性能

1.1 本地緩存

對于上面的問題,我們很容易想到,在我們商品服務中申請一個內存字典,python中就是dict,java中就是map,其中Key是商品ID,value是商品數據,通過商品ID就能查到商品數據

當我們發生查詢時,優先去查詢內存字典,沒有結果再跑到Mysql的數據庫里查詢,并將查詢到的結果放在我們的數據字典里面,并返回給用戶,這樣下次就能從內存里面查出來啦,像這種在服務內存放數據的內存,就是所謂的本地緩存,有了本地緩存的加持,真正打到Mysql的查詢就會少很多

1.2 遠程緩存

為了保證服務高可用,商品服務經常不止一個實例,如果每個實例都重復緩存一份本地內存,那就有些浪費內存條,所以更好的解決方案就是,將這部分字典內存抽出來,單獨做一個服務,他就是遠程緩存服務.

但問題又來了,多個商品服務,去讀寫同一分遠程緩存,會存在并發問題,那怎么辦?很簡單,對外我們不管有多少個網絡連接,收到讀寫命令后,都統一塞到一個線程上,再一個線程上對字典進行讀寫,這樣什么并發問題,線程切換開銷,完全不存在

這個遠程緩存服務足以滿足大部分場景,但是他過于簡陋,下來我們看如何優化它!!!

二,強大的Redis優點

2.1 支持多種數據類型

如上面所說的遠程緩存服務里只有一個字典類型,key和value都是字符串,但是我們平時寫代碼的時候還會用到其他內存里的數據結構,例如python的list,set,因此在Redis中對value進行了擴展

? ? ? ? 1,支持先進先出的隊列List

? ? ? ? 2,支持去重的Set

? ? ? ? 3,支持排序的ZSet

這樣緩存服務就更強了

2.2 內存過期策略

當我們的緩存服務支持的數據結構類型變多了之后,塞到內存里的數據就會越來越多,內存又小又貴,那該怎么辦呢?

我們可以給緩存里的數據加一個過期時間,一旦數據過期就從內存里刪掉,可以很大程度上延緩內存增長速度,那么那些數據該設置多長時間過期?這個就交給用戶方去做判斷,讓用戶通過EXPIRED命令來指定那些數據多久過期

2.3 內存淘汰策略

但如果大家都不設置過期時間,內存還是會爆炸!這該如何解決?就是在內存接近上限的時候,根據一些策略刪除一些內存,比如可以將最近最少使用的內存刪掉,這樣不僅解決了內存問題,還能讓緩存里面的數據都是熱點數據,一箭雙雕

2.4 持久化

MySql之所以過得這么舒服,那是因為前面有個緩存服務擋住了大部分流量,一旦緩存服務重啟,那內存數據就丟了,這時候流量就會全部打到Mysql身上,這時候Mysql又就原地爆炸了.

因此我們還需要給內存服務加入最大程度的持久化保證,確保服務重啟后什么數據都沒有,于是可以在緩存服務里面加一個異步子進程,定期將全量內存數據持久化到磁盤文件里,當重啟服務的時候就會加載之前的內存數據

三,Redis是什么

上面我們說了這么多,再回頭來看看Redis到底是什么?我們從開始的一個簡陋的緩存服務慢慢就變成了一個高性能,高可用,支持多種數據類型,支持各種緩存淘汰策略,并提供一定持久化能力的超強緩存服務,這就是我們常說的Redis

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

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

相關文章

藍橋杯真題——傳送陣

原題連接:藍橋杯2024年第十五屆省賽真題-傳送陣 - C語言網 知識點:并查集 題目描述 小藍在環球旅行時來到了一座古代遺跡,里面并排放置了 n 個傳送陣,進入第 i 個傳送陣會被傳送到第 ai 個傳送陣前,并且可以隨時選擇…

彩虹表攻擊

1. 引言 密碼安全一直是信息安全領域的重要課題。攻擊者可以利用**暴力破解(Brute-Force Attack)和字典攻擊(Dictionary Attack)等方式嘗試破解密碼。然而,計算機性能的提升使得這些方法的效率不斷提高,其中彩虹表攻擊(Rainbow Table Attack)**是一種極具威脅性的密碼…

Vue2 監聽器 watcher

文章目錄 前言監聽器的作用:工作流程:基本用法1. 簡單監聽2. 對象形式配置 使用場景1. 執行異步操作2. 監聽路由變化3. 復雜對象/數組變化 關鍵配置項與計算屬性的區別動態添加監聽器注意事項 前言 提示:這里可以添加本文要記錄的大概內容&a…

Linux系統程序設計:從入門到高級Day02

這一篇 我帶大家復習一下,C語言中的文件 那一部分 大家注意 這里的圖并非原創 是當時我老師的圖片 本片作用主要是 后續會有文件相關操作,這篇幫大家復習C語言文件中的內容 有助于大家后面的理解。 文章中代碼大多是圖片格式,是因為這是我…

N元語言模型的時間和空間復雜度計算

對于N元語言模型,時間復雜度是O(V ^ {N-1}),空間復雜度是O(V ^ {N}),N是詞匯表的大小。 空間復雜度:存儲所有可能的N-1元組及其對應的詞的頻次需要大量的存儲空間。例如,對于一個三元模型(N3)&…

Tmux 核心操作速查指南

Tmux 最常用操作筆記 1. 基本概念 會話(Session):一個tmux會話可以包含多個窗口,適合長期任務管理。窗口(Window):每個窗口是一個獨立的終端界面,可包含多個面板。面板&#xff08…

哈希表系列一>兩數之和

目錄 題目:方法:暴力代碼:優化后代碼: 題目: 鏈接: link 方法: 暴力代碼: public int[] twoSum(int[] nums, int target) {解法一:暴力解法:int n nums.length;for(int…

端到端機器學習流水線(MLflow跟蹤實驗)

目錄 端到端機器學習流水線(MLflow跟蹤實驗)1. 引言2. 項目背景與意義2.1 端到端機器學習流水線的重要性2.2 MLflow的作用2.3 工業級數據處理需求3. 數據集生成與介紹3.1 數據集構成3.2 數據生成方法4. 機器學習流水線與MLflow跟蹤4.1 端到端機器學習流水線4.2 MLflow跟蹤實驗…

英語學習:讀科技論文的難處

如果讀起科技論文, 我們就知道自己到底欠缺什么知識了, 那是一個挨著一個的缺。 而且還沒有維基百科可用。 怎么辦?沒辦法!硬看! 而且還要面臨語言的差異性困難。比如這一句怎么翻譯比較合適?還是直接不翻譯…

001 使用單片機實現的邏輯分析儀——吸收篇

本內容記錄于韋東山老師的畢設級開源學習項目,含個人觀點,請理性閱讀。 個人筆記,沒有套路,一步到位,歡迎交流! 00單片機的邏輯分析儀與商業版FPGA的邏輯分析儀異同 對比維度自制STM32邏輯分析儀商業版邏…

基數排序算法解析與TypeScript實現

基數排序(Radix Sort)是一種高效的非比較型整數排序算法,通過逐位分配與收集的方式實現排序。本文將深入解析其工作原理,并給出完整的TypeScript實現。 一、算法原理 1. 核心思想 多關鍵字排序:將整數按位數切割成不同…

最新全開源碼支付系統,贈送3套模板

最新全開源碼支付系統,贈送3套模板 碼支付是專為個人站長打造的聚合免簽系統,擁有卓越的性能和豐富的功能。它采用全新輕量化的界面UI 讓您能更方便快捷地解決知識付費和運營贊助的難題,同時提供實時監控和管理功能,讓您隨時隨地…

PHP基礎二【變量/輸出/數據類型/常量/字符串/運算符】

PHP基礎二 1. PHP變量2. PHP輸出3. 數據類型3.1 字符串3.2 整型3.3 浮點型3.4 布爾型3.5 數組3.6 對象3.7 NULL3.8 資源類型3.9 類型比較 4. 常量5. 運算符 1. PHP變量 1. 我們來看一個實例&#xff1a; <?php$x 5;$y 6;$z $x $y;echo $z; // echo 是輸出&#xff0c;…

ue5 仿鬼泣5魂類游戲角色和敵人沒有碰撞

UE5系列文章目錄 文章目錄 UE5系列文章目錄前言一、問題原因二、設置碰撞2.讀入數據 總結 前言 ue5 仿鬼泣5魂類游戲角色和敵人沒有碰撞 一、問題原因 在UE5中&#xff0c;角色和敵人沒有碰撞可能是由多種原因導致的&#xff0c;以下是一些可能的原因及解決方法&#xff1a…

《AdaBoost:從弱分類器到強模型的進化之路》

目錄 1. AdaBoost 的核心思想 2. AdaBoost 的關鍵步驟 步驟 1&#xff1a;初始化樣本權重 步驟 2&#xff1a;迭代訓練弱分類器 步驟 3&#xff1a;組合弱分類器 3. 用例子詳解 AdaBoost 數據集&#xff1a; 迭代過程&#xff1a; 第1輪&#xff08;t1&#xff09;&am…

Android Settings 有線網設置界面優化

Android Settings 有線網設置界面優化 文章目錄 Android Settings 有線網設置界面優化一、前言二、簡單修改1、修改的EthernetSettings代碼&#xff1a;2、有線網ip獲取代碼&#xff1a;3、AndroidManifest.xml定義有線網的Activity4、修改后界面&#xff1a; 三、其他1、有線網…

基于web的生產過程執行管理系統(源碼+lw+部署文檔+講解),源碼可白嫖!

摘要 隨著世界經濟信息化、全球化的到來和電子商務的飛速發展&#xff0c;推動了很多行業的改革。若想達到安全&#xff0c;快捷的目的&#xff0c;就需要擁有信息化的組織和管理模式&#xff0c;建立一套合理、暢通、高效的線上管理系統。當前的生產過程執行管理存在管理效率…

XSS 攻擊風險與防御實踐

? 框架與 XSS 防護概況 框架是否默認轉義高危場景建議防御措施React? 是使用 dangerouslySetInnerHTML避免使用&#xff0c;必要時做內容清洗Vue.js? 是使用 v-html避免使用&#xff0c;或使用 DOMPurify 清洗Angular? 是使用 innerHTML、bypassSecurityTrustHtml謹慎繞過…

Cesium 時間線 及 坐標轉換

文章目錄 Cesium 基礎理解&#xff08;二&#xff09;TimeLine & Clock 應用場景核心代碼實例及解釋代碼解釋 Cesium 之 實體動畫構建實體動畫的技巧1. 利用時間屬性2. 組合動畫效果3. 使用動畫曲線 優化點1. 減少屬性更新頻率2. 優化實體數量3. 合理使用材質和紋理 注意事…

ngx_regex_init

定義在 src\core\ngx_regex.c void ngx_regex_init(void) { #if !(NGX_PCRE2)pcre_malloc ngx_regex_malloc;pcre_free ngx_regex_free; #endif } NGX_PCRE21 #if !(NGX_PCRE2) 就為假 條件不成立 ngx_regex_init 函數就成了空實現 NGX_PCRE2 被定義&#xff0c;則表示 Ngin…