redis的另乙個重要的資料結構叫做lists,翻譯成中文叫做「列表」。
首先要明確一點,redis中的lists在底層實現上並不是陣列,而是鍊錶,也就是說對於乙個具有上百萬個元素的lists來說,在頭部和尾部插入乙個新元素,其時間複雜度是常數級別的,比如用lpush在10個元素的lists頭部插入新元素,和在上千萬元素的lists頭部插入新元素的速度應該是相同的。
雖然lists有這樣的優勢,但同樣有其弊端,那就是,鏈表型lists的元素定位會比較慢,而陣列型lists的元素定位就會快得多。
lists的常用操作包括lpush、rpush、lrange等。我們可以用lpush在lists的左側插入乙個新元素,用rpush在lists的右側插入乙個新元素,用lrange命令從lists中指定乙個範圍來提取元素。我們來看幾個例子:
**如下:
//新建乙個list叫做mylist,並在列表頭部插入元素"1"
127.0.0.1:6379> lpush mylist "1"
//返回當前mylist中的元素個數
(integer) 1
//在mylist右側插入元素"2"
127.0.0.1:6379> rpush mylist "2"
(integer) 2
//在mylist左側插入元素"0"
127.0.0.1:6379> lpush mylist "0"
(integer) 3
//列出mylist中從編號0到編號1的元素
127.0.0.1:6379> lrange mylist 0 1
"0""1"
//列出mylist中從編號0到倒數第乙個元素
127.0.0.1:6379> lrange mylist 0 -1
"0""1"
"2"lists的應用相當廣泛,隨便舉幾個例子:
redis的另乙個重要的資料結構叫做lists,翻譯成中文叫做「列表」。
首先要明確一點,redis中的lists在底層實現上並不是陣列,而是鍊錶,也就是說對於乙個具有上百萬個元素的lists來說,在頭部和尾部插入乙個新元素,其時間複雜度是常數級別的,比如用lpush在10個元素的lists頭部插入新元素,和在上千萬元素的lists頭部插入新元素的速度應該是相同的。
雖然lists有這樣的優勢,但同樣有其弊端,那就是,鏈表型lists的元素定位會比較慢,而陣列型lists的元素定位就會快得多。
lists的常用操作包括lpush、rpush、lrange等。我們可以用lpush在lists的左側插入乙個新元素,用rpush在lists的右側插入乙個新元素,用lrange命令從lists中指定乙個範圍來提取元素。我們來看幾個例子:
**如下:
//新建乙個list叫做mylist,並在列表頭部插入元素"1"
127.0.0.1:6379> lpush mylist "1"
//返回當前mylist中的元素個數
(integer) 1
//在mylist右側插入元素"2"
127.0.0.1:6379> rpush mylist "2"
(integer) 2
//在mylist左側插入元素"0"
127.0.0.1:6379> lpush mylist "0"
(integer) 3
//列出mylist中從編號0到編號1的元素
127.0.0.1:6379> lrange mylist 0 1
"0""1"
//列出mylist中從編號0到倒數第乙個元素
127.0.0.1:6379> lrange mylist 0 -1
"0""1"
"2"lists的應用相當廣泛,隨便舉幾個例子:
redis資料型別 lists
redis的list型別其實就是乙個每個子元素都是string型別的雙向鍊錶。我們可以通過push,pop操作從鍊錶的頭部或者尾部新增刪除元素,這樣list即可以作為 棧,又可以作為佇列。lpush方法 從頭部新增字串元素 lrange方法 從list中取資料,從頭部取 127.0.01 6379 ...
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 ...