欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

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

 更新時間:2024年04月18日 11:22:04   作者:機智的土撥鼠  
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ù)類型,我們需要學習一點前置知識。

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

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

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

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

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

String

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

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

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

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

Hash

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

hashtable:最基本的哈希表(不同于Java標準庫中的HashTable)。

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

List

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

linkedlist:鏈表的形式

ziplist:壓縮列表

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

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

Set

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

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

Zset

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

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

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

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

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

Redis的單線程模型

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

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

面試題:

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

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

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

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

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

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

相關文章

  • Redis 操作多個數(shù)據(jù)庫的配置的方法實現(xiàn)

    Redis 操作多個數(shù)據(jù)庫的配置的方法實現(xiàn)

    本文主要介紹了Redis 操作多個數(shù)據(jù)庫的配置的方法實現(xiàn),文中通過示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2022-03-03
  • Redis實現(xiàn)用戶簽到的示例代碼

    Redis實現(xiàn)用戶簽到的示例代碼

    Redis的位圖可以高效實現(xiàn)用戶簽到功能,每個bit位對應一個簽到狀態(tài),節(jié)省存儲空間,利用SETBIT、GETBIT等命令操作簽到數(shù)據(jù),可統(tǒng)計連續(xù)簽到天數(shù)和本月簽到情況,感興趣的可以了解一下
    2024-09-09
  • 使用Jedis線程池returnResource異常注意事項

    使用Jedis線程池returnResource異常注意事項

    這篇文章主要介紹了使用Jedis線程池returnResource異常注意事項,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2022-03-03
  • Redis的五種基本類型和業(yè)務場景和使用方式

    Redis的五種基本類型和業(yè)務場景和使用方式

    Redis是一種高性能的鍵值存儲數(shù)據(jù)庫,支持多種數(shù)據(jù)結構如字符串、列表、集合、哈希表和有序集合等,它提供豐富的API和持久化功能,適用于緩存、消息隊列、排行榜等多種場景,Redis能夠?qū)崿F(xiàn)高速讀寫操作,尤其適合需要快速響應的應用
    2024-10-10
  • Linux Redis 的安裝步驟詳解

    Linux Redis 的安裝步驟詳解

    這篇文章主要介紹了 Linux Redis 的安裝步驟詳解的相關資料,希望大家通過本文能掌握如何安裝Redis,需要的朋友可以參考下
    2017-08-08
  • 比較幾種Redis集群方案

    比較幾種Redis集群方案

    Redis高可用集群是一個由多個主從節(jié)點群組成的分布式服務器群,它具有復制、高可用和分片特性。Redis集群不需要sentinel哨兵也能完成節(jié)點移除和故障轉(zhuǎn)移的功能,只要將每個節(jié)點設置成集群模式,這種集群模式?jīng)]有中心節(jié)點,可水平擴展,官方稱可以線性擴展到上萬個節(jié)點
    2021-06-06
  • Redis 鍵值設計使用總結

    Redis 鍵值設計使用總結

    這篇文章主要介紹了Redis鍵值設計的使用總結,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2023-04-04
  • 如何利用Redis分布式鎖實現(xiàn)控制并發(fā)操作

    如何利用Redis分布式鎖實現(xiàn)控制并發(fā)操作

    這篇文章主要介紹了如何利用Redis分布式鎖實現(xiàn)控制并發(fā)操作,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2020-09-09
  • Redis設置database不生效的解決方案

    Redis設置database不生效的解決方案

    最近在做redis緩存設置的時候,發(fā)現(xiàn)即使已經(jīng)設置了database, 但是存數(shù)據(jù)的時候還是用的默認0數(shù)據(jù)庫,所以本文就給大家介紹了Redis設置database不生效的解決方案,需要的朋友可以參考下
    2023-08-08
  • Redis分布式鎖方案設計之防止訂單重復提交或支付

    Redis分布式鎖方案設計之防止訂單重復提交或支付

    這篇文章主要為大家介紹了Redis分布式鎖之防止訂單重復提交或支付方案設計示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2023-09-09

最新評論