Redis資料結構

2021-09-29 13:42:46 字數 2873 閱讀 1402

redis是一種高階的鍵值對key-value的儲存系統,其中值value支援五種資料型別:

redis資料型別

字串型別是redis中最為基礎的資料儲存型別,在redis中二進位制是安全的,也就是說,redis中的字串可以接受任何格式的資料,如jpeg影象資料、json物件描述資訊等。

redis中字串型別的值最大可容納512mb的資料長度,從內部實現來看其實string可看做byte陣列,最大上限是1g位元組。若僅僅使用string型別,redis可視為加上持久化的memcached。

redis原理

struct sdshdr
另外,string型別可被部分命令按int處理,比如incr等命令,若只用string型別,redis就可被看做加上持久化特性的memcached。當然redis對string型別的操作比memcached要多的多。

string資料結構是簡單的kv型別,value不僅可以是string,也可以是數字。使用string型別,可完全實現目前memcache功能,並且效率更高,可享受redis的定時持久化,可選擇rdb模式或aof模式。

string字串型別的操作

$ redis-cli
# 設定key對應的string型別的value

> set name junchow

# key值追加字串

"junchow520"

# 擷取key值,從起始下標到終止下標

> substr name 0 6

"junchow"

# 批量設定多個key值

> mset name junchow age 30 gender male

ok

# 批量獲取多個key值

> mget name age gender

# 為key值自增並返回新值

> incr age

31

# 為key值自減並返回新值

> decr age

30

# key值增加指定量

> incrby age 10

40

# key值減少指定量

> decrby age 5

35

$ get name

"junchow"

$ setnx name zhoujun

(integer) 0

$ get name

"junchow"

lists of binary-safe strings

list型別實質上是乙個雙向鍊錶,通過push、pop操作從鍊錶的左側頭部或右側尾部新增或刪除元素,因此list即可用作棧也可用作佇列。

應用場景: 獲取最新10個登入使用者資訊

-- 使用sql語句實現

select * from user order by logintime desc limit 10

在資料量大時使用sql語句查詢時資料庫所有資料都要受到影響,對資料庫的負載比較高。必要情況下給關鍵字段設定索引,索引也比較耗費系統資源。

若通過redis的list鍊錶實現,可在list鍊錶中僅保留最新的10個資料,每次進入乙個新資料就刪除乙個舊元素,就可以從鍊錶中直接獲得需要的資料,極大節省各方面資源消耗。

鍊錶操作

list 鍊錶型別操作

$ redis-cli

# 在key對應list的左側頭部新增元素

> lpush loginuser alice

> lpush loginuser ben

> lpush loginuser carl

> lpush loginuser dan

# 獲取list長度,key不存在則返回0,若key對應型別不是list則返回錯誤

> llen loginuser

# 返回指定區間內的元素,下標從0開始

> lrange loginuser 0 -1

# 擷取list保留指定區間內的元素

> ltrim loginuser 0 -1

# 從list頭部刪除元素並返回刪除的元素

> lpop loginuser

# 從list右側尾部刪除元素並返回刪除元素

> rpop loginuser

# 在key對應的list的尾部新增

> rpush loginuser elva

> rpush loginuser fifi

> 對於list雙向鍊錶的結構,若上進上出(先進後出)就是棧,若上進下出(先進先出)就是佇列。所以list即可作為棧又可作為佇列。

Redis資料結構

字典 dict 是redis裡最核心的資料結構,正如其全稱remote dictionary service所說,redis其實就是乙個字典服務,字典以key value的形式呈現給使用者,key是簡單的字串,而value可以是各種資料結構,比如字串 string 鍊錶 list 集合 set 排序...

Redis 資料結構

最近接觸到了redis的使用,借這個機會深入的了解一下redis的實現和設計原理。下面先介紹一下redis底層所用到的資料結構。redis的實現幾乎都是基於下面的幾個資料結構之上的。struct sdshdr struct listnode struct list struct dictentry ...

redis 資料結構

今天學習了redis的列表型別 lpush ltrim lrange lpush mylist content ltrim 0,99 lrange 0,1 lrange 兩個引數 分別代表第乙個元素和最後乙個元素 redis的列表型別,可以用來做訊息佇列 使用乙個程序 用lpush命名作為生產者 使...