国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

Redis(三)存儲原理與數(shù)據(jù)模型(hash沖突、漸進式rehash)

這篇具有很好參考價值的文章主要介紹了Redis(三)存儲原理與數(shù)據(jù)模型(hash沖突、漸進式rehash)。希望對大家有所幫助。如果存在錯誤或未考慮完全的地方,請大家不吝賜教,您也可以點擊"舉報違法"按鈕提交疑問。

Redis系列文章

Redis(一)原理及基本命令(柔性數(shù)組)
Redis(二)網(wǎng)絡(luò)協(xié)議和異步方式(樂觀鎖&悲觀鎖)
Redis(三)存儲原理與數(shù)據(jù)模型(hash沖突、漸進式rehash)
Redis跳表


一、redis 存儲結(jié)構(gòu)

Redis是key-value的結(jié)構(gòu),其中value包含:字典,雙向鏈表,壓縮列表,跳表,整數(shù)數(shù)組,動態(tài)字符串。
Redis(三)存儲原理與數(shù)據(jù)模型(hash沖突、漸進式rehash),Redis,redis,哈希算法,數(shù)據(jù)庫

存儲轉(zhuǎn)換

其中redis中各value的數(shù)據(jù)結(jié)構(gòu)根據(jù)不同的情況有不同的自動存儲轉(zhuǎn)換。
Redis(三)存儲原理與數(shù)據(jù)模型(hash沖突、漸進式rehash),Redis,redis,哈希算法,數(shù)據(jù)庫

鍵值存儲實現(xiàn)

redis 中 K-V 組織是通過字典來實現(xiàn)的,也就是hash表。key字符串經(jīng)過 hash 函數(shù)運算得到 64 位整數(shù);

hash沖突

redis采用hash表存儲key-value就會遇到hash沖突的情況。常見的hash沖突解決方式有:

  • 開鏈法:將hash沖突的value值用鏈表連接,每個hash結(jié)果的key值下面都連接一個鏈表。如果鏈表過長還可以將鏈表轉(zhuǎn)化為紅黑樹來優(yōu)化。
  • rehash:即增加hash桶的大小。redis有兩個hash表,當hash表1沖突了,就會采用hash表2,而hash表2的hash桶大小通常是hash表1的2倍。

但是rehash時,將hash表1的數(shù)據(jù)復制到hash表2是一個龐大的工程,可能會造成redis線程阻塞,影響redis性能。因此redis有漸進式rehash的機制來解決這個問題。

漸進式rehash

漸進式rehash和rehash一樣,同樣需要將hash表1的數(shù)據(jù)復制到hash表2,但是這個復制過程不是一次性的,而是一步一步分塊轉(zhuǎn)移。

redis的漸進式有兩種規(guī)則:

  1. 分治的思想,將 rehash 分到之后的每步增刪改查的操作當中,即每次處理redis時,復制一個key;
  2. 在定時器中,最大執(zhí)行一毫秒 rehash ;每次復制100 個數(shù)組key槽位;

rehash 過程中如果入到增刪查改時會怎么做?

  • 查:查找數(shù)據(jù)時,會先在hash表1中查找數(shù)據(jù),如果沒找到就會在hash表2中去找。
  • 增:新增數(shù)據(jù)時,只會增加到hash表2中,不會在hash表1做任何操作。
  • 刪&改:在兩個表上都會操作。

redis除了擴容會有漸進式rehash,其實縮容時也會采用rehash。
但是在rehash階段,不會再發(fā)生擴容和縮容。必須等rehash結(jié)束。

大KEY

在 redis 實例中假如形成了很大的對象,比如一個很大的 hash 或很大的 zset,這樣的對象在擴容的時候,會一次性申請更大的一塊內(nèi)存,這會導致卡頓;如果這個大 key 被刪除,內(nèi)存會一次性回收,卡頓現(xiàn)象會再次產(chǎn)生;如果觀察到 redis 的內(nèi)存大起大落,極有可能因為大 key 導致的;

解決方法:

  • 拆分value
  • 壓縮value
  • 刪除非熱點大key(可使用redis異步機制刪除)

跳表

Redis 中的有序集合(Sorted Set)是用跳表(Skip list)來實現(xiàn)的。跳表就是解決鏈表在有序節(jié)點場景下的查詢時間復雜度高問題。時間復雜度能達到O(logn)。
詳細內(nèi)容參考Redis跳表文章來源地址http://www.zghlxwxcb.cn/news/detail-573392.html

到了這里,關(guān)于Redis(三)存儲原理與數(shù)據(jù)模型(hash沖突、漸進式rehash)的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務(wù),不擁有所有權(quán),不承擔相關(guān)法律責任。如若轉(zhuǎn)載,請注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實不符,請點擊違法舉報進行投訴反饋,一經(jīng)查實,立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費用

相關(guān)文章

  • redis 存儲原理與數(shù)據(jù)模型

    redis 存儲原理與數(shù)據(jù)模型

    redis 數(shù)據(jù)庫通過 dict 實現(xiàn)映射關(guān)系。key 的固定類型是 string,value 的類型有多種。 redis 中 KV 組織是通過字典來實現(xiàn)的;hash 結(jié)構(gòu)當節(jié)點超過512 個或者單個字符串長度大于 64 時,hash 結(jié)構(gòu)采用字典實現(xiàn)。 dict 由哈希表 dictht + 哈希節(jié)點 dictEntry 組成。哈希表有兩個,通常 ht[0] 使

    2024年02月14日
    瀏覽(11)
  • redis存儲原理與數(shù)據(jù)模型學習筆記

    redis存儲原理與數(shù)據(jù)模型學習筆記

    redis-server 命令處理 網(wǎng)絡(luò)事件的監(jiān)聽 bio close file 異步關(guān)閉大文件 bio aof fsync 異步 aof 刷盤 bio lazy free 異步清理大塊內(nèi)存 io thd * io 多線程 emalloc bg thd jemalloc 后臺線程 單線程為什么快? server.h dict.h 注意 dictEntry **ht_table[2]; 怎么從key定位到value? 哈希原理: 數(shù)組 + hash(key) % 數(shù)組長

    2024年02月10日
    瀏覽(21)
  • Redis數(shù)據(jù)類型-Hash哈希存儲類型

    Redis數(shù)據(jù)類型-Hash哈希存儲類型

    小白:偉哥,java中的Map集合類型在Redis中有對應(yīng)的存儲嗎? 偉哥:有的,我?guī)銛]一波。 Redis的hash哈希存儲類型,類似于是java中的map存儲結(jié)構(gòu),適合用來存儲對象,每個哈希最多可以存儲4294967295(2^32-1)個字段值對,具體數(shù)量實際上也受Redis部署的虛擬機上的總內(nèi)存的限制

    2024年02月12日
    瀏覽(22)
  • 寫點東西《漸進式網(wǎng)絡(luò)應(yīng)用入門》

    PWA 是一種漸進式網(wǎng)絡(luò)應(yīng)用程序,它結(jié)合了應(yīng)用程序的功能和網(wǎng)絡(luò)技術(shù)。 您可以說它們是使用網(wǎng)絡(luò)技術(shù)構(gòu)建的應(yīng)用程序,但感覺和功能都像原生應(yīng)用程序。 網(wǎng)絡(luò)應(yīng)用程序似乎變得有限,因為大多數(shù)人更喜歡構(gòu)建移動應(yīng)用程序,以便用戶可以將它們保存在手機上,而不是構(gòu)建網(wǎng)

    2024年01月19日
    瀏覽(25)
  • Vue3 Flask 漸進式入門筆記

    以下均在Windows 10環(huán)境下實現(xiàn)。 安裝node.js的過程略過。 1、在cmd命令行中執(zhí)行以下命令: 2、查看vue版本 注意,如果電腦中以前有vue2版本,則需要卸載后重啟電腦再重新安裝,否則有可能安裝失敗。 1、執(zhí)行以下命令以創(chuàng)建項目 第一步需要填寫項目名稱;后面的除router建議選

    2024年02月09日
    瀏覽(17)
  • Unity教程||Unity 漸進式光照貼圖烘焙詳解

    隨著各大計算平臺的算力穩(wěn)步增長,特別是GPU技術(shù)的不斷進化,原先可望而不可及的技術(shù)比如實時光線追蹤技術(shù)開始逐步走入玩家的視野。一些先鋒廠商甚至已經(jīng)超出Demo的范疇,開始正式推出支持實時光追的游戲。 不過目前的實時光追技術(shù)還只能在配備了最新Nvidia RTX 20系列

    2024年02月08日
    瀏覽(43)
  • 【GitOps系列】如何實施自動化漸進式交付?

    【GitOps系列】如何實施自動化漸進式交付?

    前言 在實施金絲雀發(fā)布的過程中,我們通過 Argo Rollout 的金絲雀策略將發(fā)布過程分成了 3 個階段,每個階段金絲雀的流量比例都不同,經(jīng)過一段時間之后,金絲雀環(huán)境變成了新的生產(chǎn)環(huán)境。實際上,這也是一種漸進式的交付方式,它通過延長發(fā)布時間來保護生產(chǎn)環(huán)境,降低了

    2024年02月14日
    瀏覽(27)
  • 漸進式編程之旅:探尋PHP函數(shù)的奇妙世界

    漸進式編程之旅:探尋PHP函數(shù)的奇妙世界

    目錄 前言 一、函數(shù)的定義和調(diào)用 1.1?初識函數(shù) 1.1.1?函數(shù)分類 1.1.2 自定義函數(shù) 1.1.3?return 1.2 參數(shù)設(shè)置 1.2.1 無參函數(shù) 1.2.2?按值傳遞參數(shù) 1.2.3?引用傳參 1.2.4?設(shè)置參數(shù)默認值 1.2.5?指定參數(shù)類型(弱) 1.3 變量的作用域 1.3.1 變量分類 1.3.2?全局變量的使用 1.3.3?global關(guān)鍵

    2024年02月08日
    瀏覽(21)
  • 漸進式web全棧:blazor web app

    漸進式web全棧:blazor web app

    本文要說的這種開發(fā)模式,這種模式并不是只有blazor支持,js中有一樣的方案next.js nuxt.js;blazor還有很多其它內(nèi)容,本文近關(guān)注漸進式開發(fā)模式。 是的,前后端是主流,不過以下情況也許前后端分離并不是最好的選擇: 小公司,人員不多,利潤不高,創(chuàng)業(yè)階段能省則省 個人

    2024年02月05日
    瀏覽(17)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包