關于Redis底層的兩個問題

1. 為什么Redis不共享包含字符串的對象?

當服務器考慮將一個共享對象設置為鍵的值對象時,程序首先需要檢查給定的共享對象和鍵想要創建的目標對象是否完全相同,只有在共享對象和目標對象完全相同的情況下,程序才會將共享對象用作鍵的值對象,而一個共享對象保存的值越復雜,驗證共享對象和目標對象是否相同所需的復雜度就越高,消耗的CPU時間也越多:

  • 如果共享對象是保存整數值的字符串對象,那么驗證操作的復雜度為O(1);
  • 如果共享對象是保存字符串值的字符串對象,那么驗證操作的復雜度為O(N);
  • 如果共享對象是保存了多個值(或者對象)的對象,如果列表對象或者哈希對象,那么驗證操作的復雜度將會是O(N^2);

因此,盡管共享更復雜的對象是可以節約更多的內存,但受到CPU時間的限制,Redis只對白喊整數值的字符串對象進行共享。

2. 為什么有序集合需要同時使用跳躍表和字典來實現?

在理論上,有續集和可以單獨使用字典或者跳躍表的其中一種數據結構來實現,但是無論單獨使用字典還是跳躍表,在性能上對比起同時使用字典和跳躍表都會有所降低。

舉個例子:如果我們只是使用字典來實現有序集合,那么雖然以O(1)復雜度查找成員的分值這一特性會被保留,但是因為字典以無序的方式來保存集合元素,所以每次在執行范圍型操作——比如ZRANK、ZRANGE等命令時,程序都需要對字典保存的所有元素進行排序,完成這種排序至少需要O(NlogN)時間復雜度,以及額外的O(N)空間復雜度(因為要創建一個數組來保存排序后的元素)。

另一方面,如果我們只使用跳躍表來實現有序集合,那么跳躍表執行范圍型操作的所有優點都會被保留,但是因為沒有了字典,所以根據成員查找分值這一操作的復雜度將從O(1)上升到O(logN)。

以為以上原因,為了讓有序集合的查找的范圍型操作都盡可能快地執行,Redis選擇了同時使用字典和跳躍表兩種數據結構來實現有序集合。

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

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

相關文章

SOEM主站開發篇(3):為APP程序添加命令

0 工具準備 1.SOEM-1.4.0源碼(官網:http://openethercatsociety.github.io/) 2.Linux開發板(本文為正點原子I.MX6U ALPHA開發板) 3.交叉編譯工具(arm-linux-gnueabihf-gcc) 4.cmake(版本不得低于3.9,本文為3.9.2) 5.Ubuntu 16.04(用于編譯生成Linux開發板的可執行文…

【追求卓越06】算法--遞歸

引導 遞歸算法算是我們比較常用的一種算法。但是想用好并不簡單。本章我不再介紹簡單的概念,主要講解遞歸算法的優缺點和如何用遞歸寫代碼。 個人愛好 其實相對于使用while循環,我更喜歡使用遞歸算法。為什么呢? 使用遞歸算法代碼往往會變…

Java語言中的控制流程

控制流程是編程中的重要概念之一,它允許程序根據條件執行不同的代碼塊或重復執行特定的代碼塊。在Java中,控制流程由條件語句和循環語句組成。本文將詳細介紹Java中的條件語句(if語句和switch語句)和循環語句(for循環、…

MySQL用戶與權限管理

快捷查看指令 ctrlf 進行搜索會直接定位到需要的知識點和命令講解(如有不正確的地方歡迎各位小伙伴在評論區提意見,博主會及時修改) MySQL用戶與權限管理 登錄 #本地登錄 mysql -uroot -p123456#遠程登錄 #客戶端語法:mysql -…

聚觀早報 |快手Q3營收;拼多多殺入大模型;Redmi K70E開啟預約

【聚觀365】11月23日消息 快手Q3營收 拼多多殺入大模型 Redmi K70E開啟預約 華為nova 12系列或下周發布 亞馬遜啟動“AI就緒”新計劃 快手Q3營收 財報顯示,快手第三季度營收279億元,同比增長20.8%;期內盈利21.8億元,去年同期…

貓罐頭多久喂一次?好用的貓罐頭牌子推薦

貓愛吃貓罐頭,包含各種美味,提供營養和口感。但喂貓吃罐頭需技巧和耐心,以確保貓健康快樂成長。 作為一個從業寵物營養師7年的人,可以說對于貓咪的食物很有研究和貓罐頭品牌選購上,我有自己的見解。 一、貓罐頭多久喂…

shell之wc命令

shell之wc命令 Linux中的wc命令是一個用于統計給定文件中的字節數、字數和行數的工具。它也可以從標準輸入讀取數據并統計。 wc命令的語法為: wc [選項] 文件... 如果沒有給出文件名,則從標準輸入讀取。wc同時也給出所有指定文件的總統計數。wc命令的選…

40、Flink 的Apache Kafka connector(kafka source 和sink 說明及使用示例) 完整版

Flink 系列文章 1、Flink 部署、概念介紹、source、transformation、sink使用示例、四大基石介紹和示例等系列綜合文章鏈接 13、Flink 的table api與sql的基本概念、通用api介紹及入門示例 14、Flink 的table api與sql之數據類型: 內置數據類型以及它們的屬性 15、Flink 的ta…

循環神經網絡(RNN)實現股票預測

文章目錄 一、前言二、前期工作1. 設置GPU(如果使用的是CPU可以忽略這步)2. 導入數據 四、數據預處理1.歸一化2.設置測試集訓練集 五、構建模型六、激活模型七、訓練模型八、結果可視化1.繪制loss圖2.預測3.評估 一、前言 我的環境: 語言環…

【Rust】快速教程——一直在單行顯示打印、輸入、文件讀寫

前言 恨不過是七情六欲的一種,再強大的恨也沒法獨占整顆心,總有其它情感隱藏在心底深處,說不定在什么時候就會掀起滔天巨浪。——《死人經》 圖中是Starship扔掉下面的燃料罐,再扔掉頭頂的翅膀后,再翻轉過來著陸火星的…

Andorid : Toast(彈出框)- 簡單應用

Toast Android官方在Android API 30版本(或更高版本)之后即對該方法不生效。 只要SDK版本低于30,Toast.setGravity()方法即可生效 MainActivity.java package com.example.mytoast;import androidx.appcompat.app.AppCompatActivity;import android.content.Cont…

[C++ 從入門到精通] 13.派生類、調用順序、繼承方式、函數遮蔽

📢博客主頁:https://loewen.blog.csdn.net📢歡迎點贊 👍 收藏 ?留言 📝 如有錯誤敬請指正!📢本文由 丶布布原創,首發于 CSDN,轉載注明出處🙉📢現…

SOEM主站開發篇(2):添加SOEM主站APP程序

0 工具準備 1.SOEM-1.4.0源碼(官網:http://openethercatsociety.github.io/) 2.Linux開發板(本文為正點原子I.MX6U ALPHA開發板) 3.交叉編譯工具(arm-linux-gnueabihf-gcc) 4.cmake(版本不得低于3.9,本文為3.9.2) 5.Ubuntu 16.04(用于編譯生成Linux開發板的可執行文…

【Unity細節】Default clip could not be found in attached animations list.(動畫機報錯)

👨?💻個人主頁:元宇宙-秩沅 hallo 歡迎 點贊👍 收藏? 留言📝 加關注?! 本文由 秩沅 原創 😶?🌫?收錄于專欄:unity細節和bug 😶?🌫?優質專欄 ?【…

生產制造業如何謀求數字化轉型?需要哪些信息化系統做支撐?

生產制造業的數字化轉型是將數字系統和各種技術整合到傳統制造流程中的過程,這將導致行業格局的重大變革。工業4.0的到來為制造業開創了一個新時代,制造商可以簡化生產線,提高整體效率。同時,這一技術革命使他們能夠收集到大量的數…

計算機網絡實用工具之tcpdump

簡介 tcpdump是一個運行在命令行下的數據包分析器。能夠獲取到該計算機發送或接收的TCP/IP和其他數據包。 tcpdump 適用于大多數的類Unix操作系統,包括Linux、Solaris、BSD、Mac OS X、HP-UX和AIX 等等。在這些系統中,tcpdump 需要使用libpcap這個捕捉…

Altium Designer學習筆記9

忽視了一個最大的問題,就是元器件的封裝,不應該是根據AD系統的封裝走,而應該是根據立創商城上的規格書,確認每個封裝的大小,畫出封裝圖,然后才是布局和走線。 1、確認電容的封裝采用0805,貼片電…

【css】Google第三方登錄按鈕樣式修改

文章目錄 場景前置準備修改樣式官方屬性修改樣式CSS修改樣式按鈕的高度height和border-radiusLogo和文字布局 場景 需要用到谷歌的第三方登錄,登錄按鈕有自己的樣式。根據官方文檔:概覽 | Authentication | Google for Developers,提供兩種第…

局域網協議:地址解析協議(ARP,Address Resolution Protocol)

地址解析協議(ARP,Address Resolution Protocol)是一種用于在IP網絡中將IP地址映射到物理MAC地址的協議。在IP網絡中,IP是用于尋址,真正將數據包從一個設備發送到另外一個設備,用于通信的是物理MAC地址。 …

40、Flink 的Apache Kafka connector(kafka sink的介紹及使用示例)-2

Flink 系列文章 1、Flink 部署、概念介紹、source、transformation、sink使用示例、四大基石介紹和示例等系列綜合文章鏈接 13、Flink 的table api與sql的基本概念、通用api介紹及入門示例 14、Flink 的table api與sql之數據類型: 內置數據類型以及它們的屬性 15、Flink 的ta…