Redis常見五種資料物件詳解

2021-10-24 01:38:51 字數 2201 閱讀 1936

字串物件

列表物件

雜湊物件

集合物件

有序集合物件

redis中每個物件都有乙個redisobject結構表示,該結構具體如下:

typedef struct redisobject  robj;
字串物件可以是int、raw、embstr

如果字串對應儲存的是乙個整型資料,則編碼方式設定為int

如果字串物件儲存的是乙個字串

長度大於39個位元組,則使用sds來儲存當前字串,並將物件編碼格式設定為raw

長度小於39個位元組,則將物件編碼格式設定為embstr。

embstr與raw的區別

embstr是專門用於儲存短字串的一種編碼方式,這種編碼和raw編碼一樣都是使用redisobjecthe和sdshdr結構表示字串,但是raw會呼叫兩次記憶體分配函式分別建立redisobjecthe和sdshdr結構,而embstr則通過一次記憶體分配函式建立

字串常用命令 set、get

列表物件的編碼可以是ziplist或者linkedlist

ziplist編碼的列表物件可以是使用壓縮列表作為底層實現每個壓縮列表儲存乙個列表元素

linkedlist編碼的列表物件使用雙端列表作為底層實現,每個雙端鍊錶節點(node)都儲存了乙個字串物件,每個字串物件儲存了乙個列表元素

字串物件是redis五種型別物件當中唯一一種會被其他四種物件巢狀使用的物件

編碼轉換

列表物件滿足一下兩個條件時,使用ziplist編碼

列表物件儲存的所有字串元素的長度都小於64位元組;

列表物件儲存的元素數量小於512個;

不能滿足以上兩個條件的列表物件都需要使用linkedlist編碼

列表物件常用命令 lpush、rpush、lpop、rpop

雜湊物件編碼可以使用ziplist或者hashtable

編碼轉換

當雜湊物件可以滿足一下兩個條件時,雜湊物件使用ziplist編碼

雜湊物件儲存的鍵值對的鍵和值的字串長度都小於64個位元組;

雜湊物件儲存的鍵值對的數量小於512個;

不能滿足以上兩個條件的雜湊物件則使用hashtable編碼

雜湊物件常用的命令hset、hget

集合物件的編碼使用的可以是intset或者hashtable

編碼轉換

當集合物件滿足一下兩個條件時,物件使用intset編碼

集合物件所有元素都是整型

集合物件儲存的元素數量不超過512個

不能滿足這兩個條件的集合物件使用hashtable編碼

集合常見命令:scard、spop

有序集合物件

有序集合的編碼可以是ziplist和skiplist

壓縮列表內的集合元素按照分值大小進行排序,分值比較小的元素被放置在靠近表頭的位置,而分值比較大的元素則被放置到靠近表尾的位置

skiplist編碼的有序集合物件使用zset機構作為底層實現,乙個zset機構同時包含乙個字典和乙個跳躍表

編碼轉換

當有序集合物件滿足一下兩個條件時,物件使用ziplist編碼

有序集合儲存元素數量小於128個

有序集合儲存的所有元素成員長度都小於64位元組

不能滿足以上兩個條件集合的有序集合物件使用skiplist編碼

有序集合常見命令zadd、zcard、zrem

redis物件記憶體**

redis在自己的系統中構建了乙個引用計數實現的記憶體**機制,通過這個機制,程式可以通過跟蹤物件的引用計數資訊,在適當的時候自動釋放物件並進行記憶體**

redis在初始化伺服器時,建立一萬個字串物件,這些物件包含了從0到9999的所有整型值,當伺服器需要從0到9999的字串物件時候,伺服器就會使用這些共享物件,而不是建立新的物件

redis關於記憶體**,採用了lru演算法,根據當前物件的lru 引數值來進行淘汰計算。

redis五種資料型別詳解

儲存中文資料,讀取亂碼 在啟動客戶端的時候,加上 rawset get 設定key對應的值為string型別的value 獲取key對應的值 mget 批量獲取多個key的值,如果可以不存在則返回nil incr incrby incr對key對應的值進行加加操作,並返回新的值 incrby加指定值...

Redis專題 五 Redis常見的5種資料型別

redis除了可以儲存鍵還可以儲存常見的5種資料型別,分別是 string list set hash zset。對於redis的命令有一部分是可以公用的,但是還有一些其他的命令是屬於特殊使用的。首先看看一張關於redis的5種資料結構的對比 redis中的string型別就是乙個由位元組組成的序列...

Redis 五種資料型別

一 前言 上篇部落格已經對redis的一些基本知識做了一些簡介,這篇部落格,將簡單介紹一些redis的五種資料型別。分別為string 字串 hash 雜湊 list 鍊錶 set 集合 zset 有序集合 對這些型別可以執行很多原子性的操作 比如向乙個string型別的value後面追加字串 向l...