Redis數據庫知識點

Redis

set get del keys

redis中有哪些數據類型

string

最大512m

key層級

redis的key允許有多個單詞形成層級結構,多個單詞之間用‘:’隔開

set get del keys

hash

本身在redis中存儲方式就為key-value, 而hash數據結構中value又是一對key-value

hset key field value

hget key field

hdel

hkeys

list

雙向鏈表,元素可重復

lpush key element

lpop key?

rpush? key element

rpop key

lrange key start end

set

底層是hash表

無序,不可重復

查找快,支持交際并集差集等集合操作

SADD key member

SREM key member

SISMEMBER

SMEMBERS

SINTER key1 key2 交集

SDIFF key1 key2 差集

SUNION key1 key2 并集?

sorted set

底層是跳表+hash表

sorted中每個元素都帶score屬性,根據score屬性排序

特點:可排序,元素不可重復,查詢速度快

ZADD key score member

ZREM ket member

ZDIFF,ZINTER,ZUNION:求差集,交集,并集

持久化是什么,持久化aof和rdb

redis是基于內存的,因此如果遭遇斷電的情況,會導致數據丟失,這對一個數據庫而言是致命的

持久化就是指將Redis服務器中的數據保存到磁盤上,以防止數據在服務器重啟或宕機時丟失。

redis有兩種方式保障數據,一個是rdb(redis database),另一個是aof(Append only file)

rdb是每隔一定的時間間隔,對數據庫進行一次快照,并保存至磁盤中

aof是在執行寫命令是,不僅會將數據寫入到內存中,還會將寫操作追加到aof文件中,它會以日志的形式來記錄每一個寫操作,在redis重啟后,通過重新執行aof文件中的命令,來恢復數據

緩存穿透,緩存擊穿,緩存雪崩

緩存穿透、緩存擊穿和緩存雪崩是三種常見的緩存相關問題,它們有著不同的特點和原因:

1、緩存穿透是指,客戶端查詢到了根本不存在的數據,使得這個請求直達存儲層,導致負載過大造成數據庫宕機。2、緩存擊穿主要是指一個非常大的熱點數據緩存失效導致所有請求直達存儲層,導致服務崩潰。3、緩存雪崩是指某一時刻緩存層無法繼續提供服務,導致所有請求直達存儲層,造成數據庫宕機。
?

  1. 緩存穿透(Cache Penetration)

    • 定義:緩存穿透是指惡意用戶或者非法請求頻繁訪問緩存中不存在的數據,導致這些請求直接穿透緩存層,直接訪問后端存儲系統。
    • 原因:通常是因為用戶查詢了不存在的數據,或者攻擊者故意發起惡意請求。這種情況下,每次請求都會直接訪問后端存儲系統,造成系統資源浪費和性能下降。
    • 解決方案:可以通過在緩存層增加布隆過濾器等機制來過濾掉不存在的請求,或者在后端存儲系統中添加空值緩存來防止穿透。
  2. 緩存擊穿(Cache Breakdown)

    • 定義:緩存擊穿是指某一個熱點數據突然失效或者被刪除,導致大量的請求直接訪問后端存儲系統,造成后端存儲系統負載劇增和性能下降的情況。
    • 原因:通常是因為某一個熱點數據的緩存失效了,或者緩存設置了較短的過期時間。當大量請求同時到達時,會直接訪問后端存儲系統,造成擊穿現象。
    • 解決方案延長熱點數據緩存時間:針對熱點數據,可以將其緩存設置為永久有效,或者設置一個較長的過期時間,以減少因緩存失效而導致的擊穿問題。? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?加鎖:在緩存失效時,可以使用分布式鎖等機制來避免同時訪問后端存儲系統,從而降低因擊穿而導致的請求壓力。
  3. 緩存雪崩(Cache Avalanche)

    • 定義:緩存雪崩是指緩存中的大量數據同時失效,導致大量請求直接訪問后端存儲系統,造成后端存儲系統負載劇增和性能下降的情況。
    • 原因:通常是因為緩存中的數據過期時間設置過于集中,或者緩存服務器故障等原因導致大量緩存同時失效。當大量請求同時到達時,會直接訪問后端存儲系統,造成雪崩現象。
    • 解決方案隨機過期時間:對緩存中的數據設置隨機的過期時間,可以避免大量緩存同時失效,從而減少緩存雪崩的發生。? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?熱點數據預熱:在緩存中預先加載熱點數據,可以避免因緩存失效而導致的大量請求直接訪問后端存儲系統。可以通過定時任務或者手動觸發的方式進行熱點數據的預熱。

redis 為什么讀取速度那么塊

Redis 讀取速度快的主要原因有以下幾點:

  1. 內存存儲:Redis 將數據存儲在內存中,讀取數據時直接從內存中獲取,而不需要像傳統數據庫一樣進行磁盤 I/O 操作,因此讀取速度非常快。

  2. 單線程模型:Redis 使用單線程模型來處理客戶端請求,避免了多線程之間的上下文切換和鎖競爭,提高了讀取速度。

  3. 非阻塞 I/O:Redis 使用非阻塞 I/O 處理網絡請求,當客戶端發起讀取請求時,Redis 會立即返回數據,而不需要等待數據讀取完成,進一步提高了讀取速度。

  4. 高效的數據結構:Redis 提供了豐富而高效的數據結構,如字符串、哈希、列表、集合、有序集合等,這些數據結構的實現都經過了優化,能夠在內存中高效存儲和訪問數據。

  5. 事件驅動:Redis 使用事件驅動模型處理客戶端請求,采用事件循環機制監聽和處理事件,避免了線程阻塞和等待,提高了系統的并發處理能力和讀取速度。

  6. 預編譯指令:Redis 采用了預編譯的方式處理客戶端請求,將一些常用的操作編譯成底層的指令,減少了解析和執行的時間,提高了讀取速度。

為什么redis6.0要引入多線程

Redis 6.0引入多線程主要是為了提高性能和利用多核處理器的能力。在傳統的Redis版本中,采用單線程的事件循環模型,這意味著無法充分利用多核處理器的優勢

通過引入多線程,Redis可以將工作負載分布到多個線程上,從而更好地利用多核處理器的能力。這樣可以提高Redis在多核處理器上的并發性能和吞吐量,使其更適合處理大規模的并發請求。

在Redis 6.0中,引入了多線程處理網絡 I/O 操作,但主要的數據處理仍然是在單線程中完成的。這種設計被稱為“多線程非阻塞 I/O”。

在這種模型下,Redis的主線程仍然負責執行命令的解析、執行以及數據處理等核心任務,而多個 I/O 線程負責處理網絡 I/O 操作,如接受新的客戶端連接、讀取和寫入數據等。這樣可以在一定程度上提高網絡 I/O 的并發處理能力,減少了主線程在等待 I/O 完成時的空閑時間,從而提升了整體的性能表現。

采用多線程處理網絡 I/O 操作的好處在于可以更充分地利用多核處理器的優勢,提高了 Redis 在處理大量并發連接時的性能表現。同時,這種設計也避免了傳統多線程模型中因線程切換而帶來的額外開銷和復雜性。

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

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

相關文章

【easyx】快速入門——彈球小游戲(第一代)

目錄 1.需求 2.運動的小球 3.碰到邊緣反彈 4.圓周撞擊或越過邊界反彈 5.繪制和移動擋板 6.小球碰到擋板反彈 7.游戲失敗時該如何處理 8.隨機初始條件 9.完整代碼 我們這一節將結合動畫和鍵盤交互的知識來做一個小游戲 1.需求 我們先看需求:小球在窗體內運動,撞到除…

從入門到精通:詳解Linux環境基礎開發工具的使用

前言 在這篇文章中,我將深入學習和理解Linux環境基礎開發工具的使用。無論你是初學者還是有一定經驗的開發者,相信這篇文章都會對你有所幫助。我們將詳細講解軟件包管理器、編輯器、編譯器、調試器、自動化構建工具以及版本控制工具的使用。 Linux軟件…

后端數據庫開發JDBC編程Mybatis之用基于XML文件的方式映射SQL語句實操

之前的SQL語句是基于注解 以后開發中一般是一個接口對應一個映射文件 書寫映射文件 基本結構 框架 <?xml version"1.0" encoding"UTF-8" ?> <!DOCTYPE mapperPUBLIC "-//mybatis.org//DTD Mapper 3.0//EN""https://mybatis.or…

盡在掌握:Android 13 通知新功能詳解

盡在掌握&#xff1a;Android 13 通知新功能詳解 在移動應用開發中&#xff0c;通知扮演著至關重要的角色&#xff0c;它如同應用程序與用戶之間的橋梁&#xff0c;及時傳遞關鍵信息&#xff0c;提升用戶體驗。Android 13 作為最新的安卓版本&#xff0c;在通知方面帶來了諸多…

Rom應用開發遇到得一些小bug

記錄一些細碎得bug ROM時間類問題 問題描述&#xff1a; 設備拔電重啟&#xff0c;ROM時間為默認時間如1970年1月1日&#xff0c;與某些業務場景互斥 問題原因&#xff1a; 后臺接口校驗https證書校驗失敗&#xff0c;要求是2年內得請求頭校驗了時間戳&#xff0c;時間戳過期…

QLExpress入門及實戰總結

文章目錄 1.背景2.簡介3.QLExpress實戰3.1 基礎例子3.2 低代碼實戰3.2.1 需求描述3.2.1 使用規則引擎3.3.2 運行結果 參考文檔 1.背景 最近研究低代碼實現后端業務邏輯相關功能&#xff0c;使用LiteFlow作為流程編排后端service服務, 但是LiteFlow官方未提供圖形界面編排流程。…

使用RAG和文本轉語音功能,我構建了一個 QA 問答機器人

節前&#xff0c;我們星球組織了一場算法崗技術&面試討論會&#xff0c;邀請了一些互聯網大廠朋友、參加社招和校招面試的同學. 針對算法崗技術趨勢、大模型落地項目經驗分享、新手如何入門算法崗、該如何準備、面試常考點分享等熱門話題進行了深入的討論。 匯總合集&…

代碼隨想錄算法訓練營第36期DAY37

DAY37 先二刷昨天的3道題目&#xff0c;每種方法都寫&#xff1a;是否已完成&#xff1a;是。 報告&#xff1a;134加油站的樸素法沒寫對。原因是&#xff1a;在if中缺少了store>0的判斷&#xff0c;只給出了indexi的判斷。前進法沒寫出來。因為忘記了總油量的判斷。Sum。…

基于springboot圖書個性化推薦系統源碼數據庫

基于springboot圖書個性化推薦系統源碼數據庫 本論文主要論述了如何使用JAVA語言開發一個圖書個性化推薦系統&#xff0c;本系統將嚴格按照軟件開發流程進行各個階段的工作&#xff0c;采用B/S架構&#xff0c;面向對象編程思想進行項目開發。在引言中&#xff0c;作者將論述圖…

K8s 運維架構師實戰課程

阿良課程收益 掌握Kubernetes企業運維管理 掌握部署、運維、存儲、網絡、監控、日志、CICD、服務網格等實戰全面搞定&#xff01; 獨立將公司任何項目容器化遷移到K8s平臺 生產環境真實案例 大廠企業實戰經驗 學習最新版、最佳實踐 K8s 運維架構師實戰【初中級】&#xff1a;ht…

docker 方式gost代理搭建以及代理鏈實施

一、項目地址&#xff1a;https://github.com/ginuerzh/gost 二、實施 環境信息 主機名公網IP地址內網IP地址角色beijing101.200.xxx.xxx192.168.0.160單層代理serverbeijing101.200.xxx.xxx192.168.0.160鏈式代理下游serverhk47.238.xxx.xxx172.31.94.207鏈式代理上游serve…

linux誤刪crontab定時任務后的補救措施(隨手記)

起因 想看一眼定時任務的時候&#xff0c;手誤打成了-r&#xff0c;接著我的定時任務就全沒了…… 補救措施 我們都知道&#xff0c;crontab的幾個關鍵目錄中有一個是/var/log/cron&#xff0c;這個目錄記錄了crontab執行的日志。 如果平時沒有備份crontab的習慣的話&#x…

【MySQL精通之路】InnoDB-內存結構-自適應哈希索引

1.作用 自適應哈希索引使InnoDB能夠在具有適當的工作負載組合和足夠的緩沖池內存的系統上執行更像內存中的數據庫&#xff0c;而不會犧牲事務特性或可靠性。 2.設置 自適應哈希索引由innodb_adaptive_hash_index變量啟用 或在服務器啟動時由--skip-innodb-adaptive-has…

VMware 安裝Windows Server 2008 R2

1.下載鏡像 迅雷&#xff1a;ed2k://|file|cn_windows_server_2008_r2_standard_enterprise_datacenter_and_web_with_sp1_x64_dvd_617598.iso|3368839168|D282F613A80C2F45FF23B79212A3CF67|/ 2.安裝過程 自定義名字&#xff0c;點擊【瀏覽】選擇安裝路徑 點擊【瀏覽】選擇前…

鴻蒙應用開發系列 篇三:ArkTS語言

文章目錄 系列文章概述基本語法基本結構概念釋疑聲明式UI描述高級特性自定義組件頁面和自定義組件生命周期狀態管理渲染控制ArkTS語言基礎類庫系列文章 鴻蒙應用開發系列 篇一:鴻蒙系統概述 鴻蒙應用開發系列 篇二:鴻蒙系統開發工具與環境

(Oracle)SQL優化基礎(三):看懂執行計劃順序

往期內容&#xff1a; &#xff08;Oracle&#xff09;SQL優化基礎&#xff08;一&#xff09;&#xff1a;獲取執行計劃 &#xff08;Oracle&#xff09;SQL優化基礎&#xff08;二&#xff09;&#xff1a;統計信息 獲取到執行計劃后&#xff0c;對于新手朋友來講可能不知道…

Qt筆記:動態處理多個按鈕點擊事件以更新UI

問題描述 在開發Qt應用程序時&#xff0c;經常需要處理多個按鈕的點擊事件&#xff0c;并根據點擊的按鈕來更新用戶界面&#xff08;UI&#xff09;&#xff0c;如下圖。例如&#xff0c;你可能有一個包含多個按鈕的界面&#xff0c;每個按鈕都與一個文本框和一個復選框相關聯…

基于springboot+vue+Mysql的逍遙大藥房管理系統

開發語言&#xff1a;Java框架&#xff1a;springbootJDK版本&#xff1a;JDK1.8服務器&#xff1a;tomcat7數據庫&#xff1a;mysql 5.7&#xff08;一定要5.7版本&#xff09;數據庫工具&#xff1a;Navicat11開發軟件&#xff1a;eclipse/myeclipse/ideaMaven包&#xff1a;…

Flutter 中的 FormField 小部件:全面指南

Flutter 中的 FormField 小部件&#xff1a;全面指南 在Flutter的世界里&#xff0c;表單是用戶輸入數據的基本方式之一。FormField是一個強大的小部件&#xff0c;它將表單字段的創建、驗證和管理集成到了一個易于使用的抽象中。本文將為您提供一個全面的指南&#xff0c;幫助…

AWS安全性身份和合規性之AWS Firewall Manager

AWS Firewall Manager是一項安全管理服務&#xff0c;可讓您在AWS Organizations中跨賬戶和應用程序集中配置和管理防火墻規則。在創建新應用程序時&#xff0c;您可以借助Firewall Manager實施一套通用的安全規則&#xff0c;更輕松地讓新應用程序和資源從一開始就達到合規要求…