最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Redis的數(shù)據(jù)類型和內(nèi)部編碼詳解

 更新時間:2024年04月18日 11:22:04   作者:機(jī)智的土撥鼠  
Redis是通過Key-Value的形式來組織數(shù)據(jù)的,而Key的類型都是String,而Value的類型可以有很多,在Redis中最通用的數(shù)據(jù)類型大致有這幾種:String、List、Set、Hash、Sorted Set,下面通過本文介紹Redis數(shù)據(jù)類型和內(nèi)部編碼,感興趣的朋友一起看看吧

前言

為了后續(xù)能更好的講解Redis的各種數(shù)據(jù)類型,我們需要學(xué)習(xí)一點(diǎn)前置知識。

數(shù)據(jù)類型

Redis是通過Key-Value的形式來組織數(shù)據(jù)的,而Key的類型都是String,而Value的類型可以有很多。

在Redis中最通用的數(shù)據(jù)類型大致有這幾種:String、List、Set、Hash、Sorted Set。

不過,Redis底層在實(shí)現(xiàn)這些數(shù)據(jù)結(jié)構(gòu)(類型)的時候,會在源碼層面進(jìn)行優(yōu)化,以達(dá)到節(jié)省時間/節(jié)省空間的效果,而對于內(nèi)部數(shù)據(jù)結(jié)構(gòu)也稱之為內(nèi)部編碼。

Ps:有點(diǎn)指鹿為馬的感覺。Redis告訴你,我的類型就是一個字符串,但自己背后卻給優(yōu)化成了整形,指著整形說是字符串,然后咱也只能老老實(shí)實(shí)用~

String

在String類型中有三種內(nèi)部編碼方式:raw、int、embstr。

raw:最基本的字符串,底層就類似是Java中的byte數(shù)組。

int:在特定場景下,會優(yōu)化成整數(shù),方便進(jìn)行數(shù)值計(jì)算。

embstr:針對短字符串進(jìn)行的優(yōu)化。

Hash

在Hash類型中有兩種內(nèi)部編碼方式:hashtable、ziplist。

hashtable:最基本的哈希表(不同于Java標(biāo)準(zhǔn)庫中的HashTable)。

ziplist:壓縮列表,當(dāng)哈希表中的元素比較少的時候,就進(jìn)行了優(yōu)化,節(jié)省空間。

List

在List類型中有兩種內(nèi)部編碼方式:linkedlist、ziplist。

linkedlist:鏈表的形式

ziplist:壓縮列表

不過從redis3.2開始,就引入了新的實(shí)現(xiàn)方式:quicklist。

quicklist:集成了鏈表和壓縮列表的優(yōu)勢。本質(zhì)上就是一個鏈表,而每個元素又是一個壓縮列表。當(dāng)元素很多的時候,如果全是鏈表,就會出現(xiàn)很多節(jié)點(diǎn),而每個節(jié)點(diǎn)都需要使用指針域,這也會大大增加開銷。

Set

在Set類型中有兩種內(nèi)部編碼方式:hashtable、intset。

intset:存儲的都是整數(shù)的集合。

Zset

在Set類型中有兩種內(nèi)部編碼方式:skiplist、ziplist。

skiplist:跳表,跳表也是鏈表,不同于普通鏈表的是,跳表的每個節(jié)點(diǎn)上有很多指針域,巧妙利用這個特性,查詢速度能調(diào)高到O(logn).

查詢內(nèi)部編碼方式指令

#基本語法
object encoding key
#查詢key的內(nèi)部編碼

Redis會自動根據(jù)當(dāng)前的實(shí)際情況選擇內(nèi)部的編碼方式~~真香!

Redis的單線程模型

此處的單線程模型并非是真的說在Redis內(nèi)部只有一個線程在工作,說的是Redis只用一個線程來處理命令請求,在Redis內(nèi)部還有其他一些線程是用來處理網(wǎng)絡(luò)IO的,畢竟是作為一個服務(wù)器來使用的~~

正是由于Redis的單線程模型,以至于當(dāng)多個客戶端并發(fā)的對Redis服務(wù)器進(jìn)行操作的時候,不會有線程安全的問題,多個請求來的時候就使用放到一個隊(duì)列里,串行的去處理里面的命令。而且Redis的主要核心業(yè)務(wù)邏輯也都是一些“短頻快”的操作,不太消耗CPU,所以單線程模型才能很好的工作,但也有弊端:當(dāng)一個指令執(zhí)行的時間太長,就會阻塞其他指令!?。?/p>

面試題:

Redis雖然是單線程模型,為啥效率這么高呢?

1.Redis訪問的是內(nèi)存中的數(shù)據(jù),相較于數(shù)據(jù)庫訪問的是硬盤數(shù)據(jù),會快很多。

2.Redis的核心功能,比數(shù)據(jù)庫簡單(數(shù)據(jù)庫支持各種各樣的約束,功能很強(qiáng)大,勢必會帶來更多開銷)。

3.單線程模型避免了一些不必要的線程競爭開銷。

4.處理網(wǎng)絡(luò)IO的時候,使用了epoll這樣的IO多路復(fù)用機(jī)制。

到此這篇關(guān)于Redis的數(shù)據(jù)類型和內(nèi)部編碼的文章就介紹到這了,更多相關(guān)Redis數(shù)據(jù)類型和內(nèi)部編碼內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • 使用redis實(shí)現(xiàn)高效分頁的項(xiàng)目實(shí)踐

    使用redis實(shí)現(xiàn)高效分頁的項(xiàng)目實(shí)踐

    在很多場景下,我們需要對大量的數(shù)據(jù)進(jìn)行分頁展示,本文主要介紹了使用redis實(shí)現(xiàn)高效分頁的項(xiàng)目實(shí)踐,具有一定的參考價值,感興趣的可以了解一下
    2024-02-02
  • Redis連接被拒絕(Connection?refused)問題的完整解決指南

    Redis連接被拒絕(Connection?refused)問題的完整解決指南

    這篇文章主要介紹了Redis連接被拒絕問題的診斷和解決流程,涵蓋了服務(wù)未運(yùn)行、配置限制、防火墻阻擋、資源不足等常見原因,并提供了相應(yīng)的解決方案和安全配置建議,需要的朋友可以參考下
    2025-11-11
  • redis中token失效引發(fā)的一次生產(chǎn)事故

    redis中token失效引發(fā)的一次生產(chǎn)事故

    項(xiàng)目再測試的時候發(fā)現(xiàn)不定時token失效,本文主要介紹了redis中token失效引發(fā)的一次生產(chǎn)事故,文中通過示例代碼介紹的非常詳細(xì),需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2024-03-03
  • NestJS+Redis實(shí)現(xiàn)緩存步驟詳解

    NestJS+Redis實(shí)現(xiàn)緩存步驟詳解

    這篇文章主要介紹了NestJS+Redis實(shí)現(xiàn)緩存,本文分步驟給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2021-08-08
  • Python的Flask框架使用Redis做數(shù)據(jù)緩存的配置方法

    Python的Flask框架使用Redis做數(shù)據(jù)緩存的配置方法

    Redis數(shù)據(jù)庫依賴于主存,在關(guān)系型數(shù)據(jù)庫以外再配套Redis管理緩存數(shù)據(jù)將對性能會有很大的提升,這里我們就來看一下Python的Flask框架使用Redis做數(shù)據(jù)緩存的配置方法
    2016-06-06
  • 淺析Redis底層數(shù)據(jù)結(jié)構(gòu)Dict

    淺析Redis底層數(shù)據(jù)結(jié)構(gòu)Dict

    Redis是一個鍵值型的數(shù)據(jù)庫,我們可以根據(jù)鍵實(shí)現(xiàn)快速的增刪改查,而鍵與值的映射關(guān)系正是通過Dict來實(shí)現(xiàn)的,當(dāng)然?Dict?也是?Set?Hash?的實(shí)現(xiàn)方式,本文就詳細(xì)帶大家介紹一下Redis底層數(shù)據(jù)結(jié)構(gòu)?Dict,,需要的朋友可以參考下
    2023-05-05
  • 使用Redis實(shí)現(xiàn)分布式鎖的代碼演示

    使用Redis實(shí)現(xiàn)分布式鎖的代碼演示

    edis作為一個高性能的內(nèi)存數(shù)據(jù)庫,提供了多種機(jī)制來實(shí)現(xiàn)分布式鎖,本文將詳細(xì)介紹如何使用Redis實(shí)現(xiàn)分布式鎖,感興趣的朋友一起看看吧
    2025-04-04
  • redis快速部署為docker容器的方法實(shí)現(xiàn)

    redis快速部署為docker容器的方法實(shí)現(xiàn)

    部署 Redis 作為 Docker 容器是一種快速、靈活且可重復(fù)使用的方式,特別適合開發(fā)、測試和部署環(huán)境,本文主要介紹了redis快速部署為docker容器的方法實(shí)現(xiàn),具有一定的參考價值,感興趣的可以了解一下
    2024-05-05
  • Redis序列化反序列化不一致導(dǎo)致String類型值多了雙引號問題

    Redis序列化反序列化不一致導(dǎo)致String類型值多了雙引號問題

    這篇文章主要介紹了Redis序列化反序列化不一致導(dǎo)致String類型值多了雙引號問題,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2024-08-08
  • Redis實(shí)現(xiàn)驗(yàn)證碼發(fā)送并限制每日發(fā)送次數(shù)的示例代碼

    Redis實(shí)現(xiàn)驗(yàn)證碼發(fā)送并限制每日發(fā)送次數(shù)的示例代碼

    本文主要介紹了Redis實(shí)現(xiàn)驗(yàn)證碼發(fā)送并限制每日發(fā)送次數(shù)的示例代碼,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2022-04-04

最新評論

广昌县| 原平市| 错那县| 天全县| 商城县| 岳西县| 黄梅县| 迭部县| 平舆县| 阿巴嘎旗| 左权县| 三都| 公主岭市| 漳州市| 海丰县| 清涧县| 讷河市| 葫芦岛市| 正蓝旗| 改则县| 富宁县| 斗六市| 左权县| 合川市| 新蔡县| 上饶县| 岳普湖县| 大化| 临海市| 鹤峰县| 临洮县| 潼南县| 宁夏| 乐都县| 成安县| 罗源县| 罗城| 鹤壁市| 拉孜县| 平陆县| 禹州市|