一文回顧Redis五大物件 資料型別

2022-01-10 02:09:06 字數 3641 閱讀 4348

最新:redis記憶體——三個重要的緩衝區

最新:redis記憶體——記憶體消耗(記憶體都去哪了?)

最新:redis持久化——如何選擇合適的持久化方式

最新:redis持久化——aof日誌

redis 是乙個高效能的分布式記憶體型資料庫,在國內外各大網際網路公司中都有著廣泛的使用,即使是一些非網際網路公司中也有著非常重要的適用場景,所以對 redis 的掌握也成為後端工程師必備的基礎技能,在面試中,redis早已成為老生常談的話題,而在實際工作中,我們更是每時每刻都需要和 redis 打交道。因此熟練的掌握redis技術棧的各種武功秘籍至關重要!

redis提供了五種主要的物件(資料型別)供開發者使用,它提供了強大且實用的功能。然而實際開發中有大多數的開發者僅簡單會用redis string的get與set。這就好比降龍十八掌,你只學會了一掌。在真正實戰對敵之時不免略顯單薄!這篇文章我們將回顧redis這五大物件,以便於我們能夠在實戰中真正做到游刃有餘。

字串物件的內部編碼有3種 :intrawembstr。redis會根據當前值的型別和長度來決定使用哪種編碼來實現。

reids字串的使用場景是最為廣泛的,甚至有些對redis其它幾種物件不太熟悉的人,基本所有場景都會使用字串(序列化一下直接扔進去),這讓本身很單純的字串承受了它這個年紀本不該承受的重量。其實redis的主要使用場景主要有以下幾種:

作為快取層,快取熱點資料

redis字串可以自增自減的特性可以用來做計數器、限速器、自增id生成等

分布式系統的session共享

二進位制資料的儲存

有關redis字串的更詳細的介紹,可以檢視我的這篇文章。

redis物件——字串(string)

雜湊物件用來儲存一組資料對。每個資料對又包含鍵值兩部分。

雜湊物件也有兩種實現方式。ziplist(壓縮列表),hashtable(雜湊表)

同樣,只有當儲存的資料量比較小的情況下,redis 才使用壓縮列表來實現雜湊物件。具體需要滿足兩個條件:

當不能同時滿足上面兩個條件的時候,redis 就使用雜湊表來實現雜湊物件。

當儲存的內容是物件的時候,redis 字串物件的很多功能使用redis 雜湊物件也可以實現。如快取使用者資訊的時候,使用redis雜湊物件儲存,簡單直觀,如果使用合理可以減少記憶體空間的使用。但也有其缺點,就是要要控制雜湊在ziplist和hashtable兩種內部編碼的轉換,hashtable會消耗更多記憶體。

此外,redis 雜湊物件還可以實現購物車、計數器等功能。

有關redis雜湊物件的更詳細的介紹,可以檢視我的這篇文章。

redis物件——雜湊(hash)

列表這種物件支援儲存一組有序的、可重複的資料。因為其有序性,它可以獲取指定範圍的元素列表、可以在o(1)的時間複雜度獲取指定索引下標的元素等。

在redis3.2版本以前列表型別的內部編碼有兩種。當滿足下面兩個條件的時候,redis 列表物件使用ziplist(壓縮列表)來實現。

當列表型別無法滿足ziplist的條件時,redis會使用linkedlist作為列表的內部實現。

而在redis3.2版本開始對列表資料結構進行了改造,使用 quicklist 代替了 ziplist 和 linkedlist.

由於列表物件的有序的特性,它比較適合用來做文章、商品等列表的儲存。

列表型別可以 lpush (左側push),同時又可以使用 rpop (右側彈出)(查詢並刪除)第乙個元素,所以列表型別具有先進先出的特性,可以用來實現訊息佇列。也可以lpush(左側push)->lpop(左側彈出),具有後進先出的特性,因此開發中需要使用棧的時候,我們也可以借助列表物件來實現。

有關redis列表物件的更詳細的介紹,可以檢視我的這篇文章。

redis物件——列表(list)

集合物件 (set) 是乙個無序並唯一的鍵值集合。它的儲存順序不會按照插入的先後順序進行儲存。與列表所不同的是它儲存的資料是無序且不重複的。

集合物件的內部編碼也有兩種:intset(整數集合)與hashtable(雜湊表)。當滿足下面兩個條件的時候集合物件使用intset來實現。

不滿足上面兩個條件時集合物件使用hashtable來實現。

集合物件的主要幾個特性就是,無序、不可重複、支援並交差,因此可以用來做標籤系統。

而集合的 spop(隨機移除並返回集合中乙個或多個元素) 和 srandmember(隨機返回集合中乙個或多個元素) 命令可以幫助我們實現乙個**系統。

有關redis集合物件的更詳細的介紹,可以檢視我的這篇文章。

redis物件——集合(set)

有序集合型別 (sorted set或zset) 相比於集合型別多了乙個排序屬性 score(分值),對於有序集合 zset 來說,每個儲存元素相當於有兩個值組成的,乙個是有序結合的元素值,乙個是排序值。有序集合保留了集合不能有重複成員的特性(分值可以重複),但不同的是,有序集合中的元素可以排序。

有序集合是由 ziplist (壓縮列表) 或 skiplist (跳躍表) 組成的。

當資料比較少時,有序集合使用的是 ziplist 儲存的,有序集合使用 ziplist 格式儲存必須滿足以下兩個條件:

如果不能滿足以上兩個條件中的任意乙個,有序集合將會使用 skiplist 結構進行儲存。

有關redis有序集合物件的更詳細的介紹,可以檢視我的這篇文章。

redis物件——有序集合(zset)

redis提供了五種最基礎也是最常用的物件(資料型別):string、hash、list、set、zset。了解這五種物件的有助於我們更好的在日常開發中對redis進行使用。而通過這篇文章我們可以看到每種物件都是通過多種資料結構來實現的,大家可以思考一下為什麼。

最新:redis記憶體——三個重要的緩衝區

最新:redis記憶體——記憶體消耗(記憶體都去哪了?)

最新:redis持久化——如何選擇合適的持久化方式

最新:redis持久化——aof日誌

redis持久化——記憶體快照(rdb)

一文回顧redis五大物件(資料型別)

redis物件——有序集合(zset)

redis物件——集合(set)

redis物件——列表(list)

redis物件——雜湊(hash)

redis資料結構——quicklist

redis物件——字串

redis物件——redis物件系統簡介

redis資料結構——壓縮列表

redis資料結構——整數集合

redis資料結構——跳躍表

redis資料結構——字典

redis資料結構——鍊錶

redis資料結構——簡單動態字串sds

Redis的五大物件

redis是乙個高效能的分布式記憶體型資料庫,再國內外都有著廣泛使用,所以對redis的掌握也成為後端工程師必備的基礎技能。redis提供了五種主要的物件 資料型別 供開發者使用,它提供了強大且實用的功能。然而實際開發中有大多數的開發者僅簡單會用redis string的get與set。字串物件的內...

redis五大資料型別

redis支援五種資料型別 string 字串 hash 雜湊 list 列表 set 集合 及zset sorted set 有序集合 127.0 0.1 6379 set name yzl ok127.0 0.1 6379 get name yzl 127.0 0.1 6379 hmset my...

redis五大資料型別

string是redis最基本的型別 string型別是二進位制安全的,可以包含任何資料,或者序列化的物件 string型別是redis最基本的資料型別,乙個redis中字串value最多可以是512mhash是乙個鍵值對集合 hash是乙個string型別的field和value的對映表,hash...