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

深入學(xué)習(xí) Redis - 常用數(shù)據(jù)類(lèi)型,結(jié)構(gòu)認(rèn)識(shí)

這篇具有很好參考價(jià)值的文章主要介紹了深入學(xué)習(xí) Redis - 常用數(shù)據(jù)類(lèi)型,結(jié)構(gòu)認(rèn)識(shí)。希望對(duì)大家有所幫助。如果存在錯(cuò)誤或未考慮完全的地方,請(qǐng)大家不吝賜教,您也可以點(diǎn)擊"舉報(bào)違法"按鈕提交疑問(wèn)。

目錄

一、Redis數(shù)據(jù)類(lèi)型?

Redis 數(shù)據(jù)類(lèi)型結(jié)構(gòu)簡(jiǎn)單認(rèn)識(shí)

每個(gè)數(shù)據(jù)類(lèi)型具體的編碼方式

1.string?

2.hash

3.list

4.set

5.zset

典中典:記數(shù)字?。。?/p>

6.查看 key 對(duì)應(yīng) value? 的實(shí)際編碼方式

如果本文有幫助到你,不妨給個(gè)三連吧~


一、Redis數(shù)據(jù)類(lèi)型?


Redis 數(shù)據(jù)類(lèi)型結(jié)構(gòu)簡(jiǎn)單認(rèn)識(shí)

Redis 中所有的 key 都是 string 類(lèi)型,不同的是 value 的數(shù)據(jù)類(lèi)型有很多種,接下來(lái)看看幾種常見(jiàn)的類(lèi)型

深入學(xué)習(xí) Redis - 常用數(shù)據(jù)類(lèi)型,結(jié)構(gòu)認(rèn)識(shí),Redis深度學(xué)習(xí),學(xué)習(xí),redis,數(shù)據(jù)庫(kù)

Redis 底層在實(shí)現(xiàn)上述數(shù)據(jù)類(lèi)型的時(shí)候,會(huì)在源碼層面,針對(duì)上述實(shí)現(xiàn)進(jìn)特定的優(yōu)化,達(dá)到 節(jié)省時(shí)間 / 節(jié)省空間 的效果,也就是說(shuō),內(nèi)部具體實(shí)現(xiàn)的編碼方式,還會(huì)有變數(shù).

例如之前炒的很熱的一個(gè)新聞:“指鼠為鴨”~

鴨脖店,承諾賣(mài)給你的這個(gè)東西吃起來(lái)和鴨脖是一樣的,但是內(nèi)部的數(shù)據(jù)結(jié)構(gòu),是否真的是鴨脖,可能就根據(jù)實(shí)際情況,做出一定的優(yōu)化.

Ps:redis 承諾,這里有個(gè) hash 表,你進(jìn)行 查詢、插入、刪除、操作,都保證 O(1),但是背后的實(shí)現(xiàn)不一定就是標(biāo)準(zhǔn)的 hash 表,可能在特定場(chǎng)景下使用別的數(shù)據(jù)結(jié)構(gòu).

每個(gè)數(shù)據(jù)類(lèi)型具體的編碼方式

同一個(gè)數(shù)據(jù)類(lèi)型,背后的可能的編碼方式是不同的,會(huì)根據(jù)特定場(chǎng)景優(yōu)化(redis 會(huì)自動(dòng)適應(yīng),程序員在使用 redis 的時(shí)候一般感知不到~)

1.string?

string 類(lèi)型內(nèi)部有以下三種編碼方式:

  1. raw:最基本的字符串,底層就是一個(gè) java 中 byte 類(lèi)型的數(shù)組(C++ 中 char 類(lèi)型的數(shù)組,C++ 中 char 是一個(gè)字節(jié)).
  2. int:整形類(lèi)型,redis 通常用來(lái)實(shí)現(xiàn) “計(jì)數(shù)”這樣的功能,當(dāng) value 是一個(gè)整數(shù)的時(shí)候,此時(shí) redis 可能直接使用 int 來(lái)保存.
  3. embstr:針對(duì)短字符串進(jìn)行的特殊優(yōu)化.

2.hash

hash 類(lèi)型內(nèi)部有以下兩種編碼方式:

  1. hashtable:最基本的哈希表(不是 java 標(biāo)準(zhǔn)庫(kù)中的 HashTable),redis 內(nèi)部對(duì)哈希表的實(shí)現(xiàn)方式和 java 中的哈希表可能不太一樣,當(dāng)時(shí)整體思想都是一樣的(比如對(duì)數(shù)組下的節(jié)點(diǎn)進(jìn)行賦值時(shí),先檢查有沒(méi)有這個(gè)元素,若有就會(huì)直接覆蓋,沒(méi)有就會(huì)看有沒(méi)有 hash 沖突...)
  2. ziplist:壓縮列表,當(dāng)哈希表里的元素比較少的時(shí)候,就優(yōu)化成了 ziplist 了,能夠節(jié)省空間(壓縮的原因:redis 上有很多 key,可能某些 key 的 value 是 hash,此時(shí)如果 key 特別多,對(duì)應(yīng)的 hash 也特別多,但是每個(gè) hash 又不是特別大的情況下,就盡量去壓縮,讓整體占用內(nèi)存更小了);

3.list

list 類(lèi)型內(nèi)部有以下兩種編碼方式:

  1. linkedlist:雙向鏈表,當(dāng)一個(gè) list 包含了數(shù)量比較多的元素,又或者 list 中包含的元素都是比較長(zhǎng)的字符串時(shí),Redis就會(huì)使用 linkedlist 作為 list 的底層實(shí)現(xiàn)。
  2. ziplist:壓縮列表,當(dāng)哈希表里的元素比較少的時(shí)候,就優(yōu)化成了 ziplist 了,能夠節(jié)省空間(壓縮的原因:redis 上有很多 key,可能某些 key 的 value 是 hash,此時(shí)如果 key 特別多,對(duì)應(yīng)的 hash 也特別多,但是每個(gè) hash 又不是特別大的情況下,就盡量去壓縮,讓整體占用內(nèi)存更小了);

Ps:redis 從 3.2 開(kāi)始,引入了新的實(shí)現(xiàn)方式 quicklist,quicklist 就是一個(gè)鏈表,每個(gè)元素又是一個(gè) ziplist,同時(shí)兼顧了 linkedlist 和 ziplist 的優(yōu)點(diǎn),空間和效率都兼顧到了.

4.set

set 類(lèi)型內(nèi)部有以下兩種編碼方式:

  1. hashtable:最基本的哈希表(不是 java 標(biāo)準(zhǔn)庫(kù)中的 HashTable),redis 內(nèi)部對(duì)哈希表的實(shí)現(xiàn)方式和 java 中的哈希表可能不太一樣,當(dāng)時(shí)整體思想都是一樣的(比如對(duì)數(shù)組下的節(jié)點(diǎn)進(jìn)行賦值時(shí),先檢查有沒(méi)有這個(gè)元素,若有就會(huì)直接覆蓋,沒(méi)有就會(huì)看有沒(méi)有 hash 沖突...)
  2. intset:是一個(gè)集合中存的都是整數(shù)的結(jié)構(gòu).

5.zset

zset 類(lèi)型內(nèi)部有以下兩種編碼方式:

  1. skiplist:跳表,類(lèi)似于 leetcode 上的一個(gè)經(jīng)典題目,“復(fù)制帶隨機(jī)指針的鏈表”,跳表也是鏈表,不同于普通的鏈表,每一個(gè)節(jié)點(diǎn)上有多個(gè)指針域,巧妙的搭配這些指針域的指向就可以做到,從跳表上查詢?cè)氐臅r(shí)間復(fù)雜度是 O(logN).
  2. ziplist:壓縮列表,當(dāng)哈希表里的元素比較少的時(shí)候,就優(yōu)化成了 ziplist 了,能夠節(jié)省空間(壓縮的原因:redis 上有很多 key,可能某些 key 的 value 是 hash,此時(shí)如果 key 特別多,對(duì)應(yīng)的 hash 也特別多,但是每個(gè) hash 又不是特別大的情況下,就盡量去壓縮,讓整體占用內(nèi)存更小了).

典中典:記數(shù)字?。?!

redis 會(huì)根據(jù)當(dāng)前的 實(shí)際情況選擇內(nèi)部的編碼方式,自動(dòng)適應(yīng),那么是否要記住,啥時(shí)候使用啥編碼方式呢?

只記思想,不記數(shù)字?。?!

比如網(wǎng)上可能會(huì)說(shuō):“如果字符串的長(zhǎng)度小于 39 字節(jié)使用 embstr ,超過(guò) 39 字節(jié)使用 raw”。

可能你就會(huì)覺(jué)得,啊,這 39 就是一個(gè)重點(diǎn),但我要告訴你的是,記數(shù)字,沒(méi)有任何意義?。?!

  1. 數(shù)字都是可配置的.
  2. 數(shù)字是咋來(lái)的?需要考證清楚!相比于知道數(shù)字,更重要的是知道數(shù)字是怎么得到的,就可以根據(jù)所處的實(shí)際場(chǎng)景,重新得到這樣的數(shù)字.

很多同學(xué)會(huì)陷入“記數(shù)字”的誤區(qū),大多是因?yàn)閷W(xué)校的考試和工作面試差別很大:學(xué)??荚囉袠?biāo)準(zhǔn)答案,而面試中有一部分有標(biāo)準(zhǔn)答案,也有一部分沒(méi)有標(biāo)準(zhǔn)答案,面試官看中的不是答案,而是你解決問(wèn)題的過(guò)程和思路,哪怕是錯(cuò)的,可能看你思維不錯(cuò),也會(huì)留用你~

可能大家記得最多的就是 HashMap 的相關(guān)數(shù)字,比如,鏈表長(zhǎng)度達(dá)到 xx ,就會(huì)變成紅黑樹(shù),負(fù)載因子達(dá)到 xx 就會(huì)觸發(fā)擴(kuò)容,在實(shí)際的工作中,遇到的場(chǎng)景,和上述數(shù)字就不一定合適了,正確的做法是,根據(jù)實(shí)際的測(cè)試結(jié)果,測(cè)試出一個(gè)更合適的數(shù)值,類(lèi)似還有線程池線程數(shù)目設(shè)置成多少這樣的問(wèn)題...?

這些參數(shù)都是很常見(jiàn)的,同時(shí)也是可調(diào)的~

6.查看 key 對(duì)應(yīng) value? 的實(shí)際編碼方式

如果你想了解當(dāng)前場(chǎng)景下,你的 value 到底被優(yōu)化成了何種編碼方式,也是可以通過(guò)以下指令觀察到的~

object encoding key

深入學(xué)習(xí) Redis - 常用數(shù)據(jù)類(lèi)型,結(jié)構(gòu)認(rèn)識(shí),Redis深度學(xué)習(xí),學(xué)習(xí),redis,數(shù)據(jù)庫(kù)

?文章來(lái)源地址http://www.zghlxwxcb.cn/news/detail-595914.html

如果本文有幫助到你,不妨給個(gè)三連吧~

到了這里,關(guān)于深入學(xué)習(xí) Redis - 常用數(shù)據(jù)類(lèi)型,結(jié)構(gòu)認(rèn)識(shí)的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

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

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

相關(guān)文章

  • Redis常用數(shù)據(jù)類(lèi)型

    Redis常用數(shù)據(jù)類(lèi)型

    Redis hash 是一個(gè) string 類(lèi)型的 field(字段) 和 value(值) 的映射表,hash 特別適合用于存儲(chǔ)對(duì)象。 Redis 中每個(gè) hash 可以存儲(chǔ) 232 - 1 鍵值對(duì)(40多億) 它的value就是一個(gè)hash類(lèi)型,而hash類(lèi)型的結(jié)構(gòu)key value形式。一般用于存放對(duì)象數(shù)據(jù)。 Redis列表是簡(jiǎn)單的字符串列表,按照插入順序

    2024年02月12日
    瀏覽(21)
  • 深入學(xué)習(xí) redis - Stream、Geospatial、HyperLogLog、Bitmap、Bitfields 類(lèi)型擴(kuò)展

    深入學(xué)習(xí) redis - Stream、Geospatial、HyperLogLog、Bitmap、Bitfields 類(lèi)型擴(kuò)展

    目錄 前言 Stream geospatial HyperLogLog Bitmaps Bitfields redis 中最關(guān)鍵的五個(gè)數(shù)據(jù)類(lèi)型 String、List、Hash、Set、Zset 應(yīng)用最廣泛,同時(shí) redis 也推出了額外的 5 個(gè)數(shù)據(jù)類(lèi)型,他們分別是針對(duì)特殊場(chǎng)景才進(jìn)行的應(yīng)用的. Ps:這幾種類(lèi)型的具體使用不用記,記你也記不住,因?yàn)椴怀S?,因此我?/p>

    2024年02月15日
    瀏覽(43)
  • Redis常用數(shù)據(jù)類(lèi)型和使用場(chǎng)景

    Redis常用數(shù)據(jù)類(lèi)型和使用場(chǎng)景

    Redis目前支持5種數(shù)據(jù)類(lèi)型,分別是: ? ? String(字符串) List(列表) Hash(字典) Set(集合) Sorted Set(有序集合) 下面就分別介紹這五種數(shù)據(jù)類(lèi)型及其相應(yīng)的操作命令。 ? 1. String(字符串) String是簡(jiǎn)單的 key-value 鍵值對(duì),value 不僅可以是 String,也可以是數(shù)字。String在r

    2024年02月16日
    瀏覽(30)
  • redis常用五種數(shù)據(jù)類(lèi)型詳解

    redis常用五種數(shù)據(jù)類(lèi)型詳解

    目錄 前言: string 相關(guān)命令 內(nèi)部編碼 應(yīng)用場(chǎng)景 hash 相關(guān)命令 內(nèi)部編碼 應(yīng)用場(chǎng)景 list 相關(guān)命令 內(nèi)部編碼 應(yīng)用場(chǎng)景 set 相關(guān)命令 內(nèi)部編碼 應(yīng)用場(chǎng)景 Zset 相關(guān)命令 內(nèi)部編碼 應(yīng)用場(chǎng)景 漸進(jìn)式遍歷 ? ? redis有多種數(shù)據(jù)類(lèi)型,常用的有五種,其他都是在特定場(chǎng)景下使用的數(shù)據(jù)類(lèi)型。

    2024年02月11日
    瀏覽(20)
  • redis十大數(shù)據(jù)類(lèi)型的說(shuō)明和常用命令

    表1.1 十大數(shù)據(jù)類(lèi)型 類(lèi)型 說(shuō)明 String (字符串) 最基本的數(shù)據(jù)類(lèi)型,可以存儲(chǔ)字符串、整數(shù)或浮點(diǎn)數(shù) List (列表) 一種有序的字符串列表,支持從兩端插入和刪除元素 Hash (哈希表) 一種 key-value 存儲(chǔ)結(jié)構(gòu),用于存儲(chǔ)對(duì)象,類(lèi)似于關(guān)聯(lián)數(shù)組 Set (集合) 一種無(wú)序的字符串集合,支持交集

    2024年02月03日
    瀏覽(17)
  • Redis基本數(shù)據(jù)類(lèi)型常用操作以及使用場(chǎng)景

    單值緩存 對(duì)象緩存 分布式鎖 計(jì)數(shù)器 分布式系統(tǒng)全局序列號(hào)?? ? ? 對(duì)象緩存 電商購(gòu)物車(chē) 優(yōu)缺點(diǎn) 隊(duì)列 微博消息和微信公號(hào)消息? 微信抽獎(jiǎng)小程序? 微信微博點(diǎn)贊,收藏,標(biāo)簽? ?集合操作實(shí)現(xiàn)微博微信關(guān)注模型 集合操作實(shí)現(xiàn)電商商品篩選? 常用操作 ?Zset集合操作實(shí)現(xiàn)排行

    2024年02月11日
    瀏覽(20)
  • Redis對(duì)象和五種常用數(shù)據(jù)類(lèi)型

    Redis對(duì)象和五種常用數(shù)據(jù)類(lèi)型

    對(duì)象分為鍵對(duì)象和值對(duì)象 鍵對(duì)象一般是string類(lèi)型 值對(duì)象可以是string,list,set,zset,hash Redis對(duì)象和數(shù)據(jù)結(jié)構(gòu)的關(guān)系 鍵總是一個(gè)字符串對(duì)象 而值可以是五種中的一種 type 命令 得到的結(jié)果就是值的類(lèi)型 可以用object encoding命令查看編碼 list數(shù)據(jù)類(lèi)型的編碼由linkedlist和ziplist編碼合并

    2024年02月12日
    瀏覽(25)
  • Redis - 數(shù)據(jù)類(lèi)型映射底層結(jié)構(gòu)

    Redis - 數(shù)據(jù)類(lèi)型映射底層結(jié)構(gòu)

    從數(shù)據(jù)類(lèi)型上體現(xiàn)就是,同一個(gè)數(shù)據(jù)類(lèi)型,在不同的情況下會(huì)使用不同的編碼類(lèi)型,底層所使用的的數(shù)據(jù)結(jié)構(gòu)也不相同。 字符串對(duì)象的編碼可以是 int 、 raw 和 embstr 三者之一。 embstr 編碼是專門(mén)用于保存簡(jiǎn)短字符串的一種優(yōu)化編碼方式,與 raw 編碼會(huì)調(diào)用兩次內(nèi)存分配函數(shù)分

    2023年04月21日
    瀏覽(27)
  • Redis的五大數(shù)據(jù)類(lèi)型的數(shù)據(jù)結(jié)構(gòu)

    Redis的五大數(shù)據(jù)類(lèi)型的數(shù)據(jù)結(jié)構(gòu)

    ??Redis底層有六種數(shù)據(jù)類(lèi)型包括: 簡(jiǎn)單動(dòng)態(tài)字符串、雙向鏈表、壓縮列表、哈希表、跳表和整數(shù)數(shù)組 。這六種數(shù)據(jù)結(jié)構(gòu)五大數(shù)據(jù)類(lèi)型關(guān)系如下: String:簡(jiǎn)單動(dòng)態(tài)字符串 List:雙向鏈表、壓縮列表 Hash:壓縮列表、哈希表 Sorted Set:壓縮列表、跳表 Set:哈希表、整數(shù)數(shù)組 ??

    2024年02月11日
    瀏覽(15)
  • ②【Hash】Redis常用數(shù)據(jù)類(lèi)型:Hash [使用手冊(cè)]

    ②【Hash】Redis常用數(shù)據(jù)類(lèi)型:Hash [使用手冊(cè)]

    個(gè)人簡(jiǎn)介:Java領(lǐng)域新星創(chuàng)作者;阿里云技術(shù)博主、星級(jí)博主、專家博主;正在Java學(xué)習(xí)的路上摸爬滾打,記錄學(xué)習(xí)的過(guò)程~ 個(gè)人主頁(yè):.29.的博客 學(xué)習(xí)社區(qū):進(jìn)去逛一逛~ redis hash 是一個(gè)String類(lèi)型的field(字段)和value(值)的映射表。 redis中每個(gè)hash可以存儲(chǔ)2^32-1個(gè)鍵值對(duì)(40多億

    2024年02月04日
    瀏覽(48)

覺(jué)得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請(qǐng)作者喝杯咖啡吧~博客贊助

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

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包