Redis資料類型
Redis具有下列幾種資料類型,完整的說明可參閱官網“An introduction to Redis data types and abstractions”這篇文章。
- 字串
- 串列(list):有序儲存多筆資料元素。Redis的串列是一種鏈結串列(linked list)資料結構,而Python語言的list(列表)類型相當於C或JavaScript等語言的陣列(array)。 鏈結串列和陣列的主要差別如下圖,陣列元素存放在連續的記憶體空間;串列則離散存放。陣列存取每個元素的時間都一樣,但是插入資料的速度比較慢(因為要重新調整後面元素的存放位置);鏈結串列則是元素越接近頭、尾兩端,存取速度就越快,但是透過索引編號方式存取的速度比較慢。
用排列骨牌來比喻存取串列資料,取出前面或後面三、五個牌很簡單,但若要取出第10個牌,就要重頭開始數。串列元素的編號從0開始,也可以從後頭由-1倒數。
一個串列可儲存超過40億個(232 – 1,即:4,294,967,295)元素。
- 雜湊(hash):相當於Python的「字典(dict)」或JavaScript的「物件(Object)」類型,以「鍵∕值」(key/value)的型式儲存結構化的多筆資料。「鍵名」也稱為「欄位(field)」。一個雜湊可儲存超過40億組鍵∕值對。
- 集合(set):無序儲存多筆唯一(無重複值)資料元素,並提供求取交集、聯集和差集的操作指令。一個集合可儲存超過40億個元素。
- 有序集合(sorted set):有序存放多筆唯一資料元素。
- HyperLogLogs:一種估算資料集當中的唯一值數量的統計演算法,相關說明請參閱對岸「大数据算法:基数统计」這一篇文章。
操作串列資料
串列就是一組字串資料的儲存空間,使用LPUSH(原意為“Left Push”,從左邊推入)或者RPUSH(代表“Right Push”,從右邊推入)建立串列並依序存入元素值。
操作遠端Redis Labs資料庫之前,記得先連線到Redis Labs主機:
接著執行LPUSH和RPUSH新增串列:
上面兩道指令將建立如下的she串列:
讀取指定索引的元素的指令是LINDEX(代表“list index”,串列索引):
透過LRANGE(代表“list range”,串列範圍)可讀取指定範圍的串列元素,從「起始索引」取到「結束索引」,有頭有尾:
執行結果如下:
透過LSET(代表“list set”,設定串列)指令,可改變指定索引的串列元素值。底下指令將把索引編號5的元素改成“小菁”:
LPOP和RPOP分別用於移除並傳回串列開頭(最左邊)和結尾(最右邊)的元素;執行LLEN(代表“list length”,串列長度)指令可得知元素數量:
執行之後的she串列剩下4個元素:
在串列中插入元素的指令是LINSERT(“insert”代表「插入」),若要在“小雅”元素後面插入一個“小雪”:
指令語法如下,用AFTER(之後)或BEFORE(之前)指定「新值」插入「目標元素」的後面或前面。
從串列中刪除指定元素的指令是LREM(REM代表“remove”,移除),底下的敘述將刪除所有“小雪”元素:
其中的「數量」參數:
- 大於0,例如:2,代表從頭開始刪除2個吻合的元素。
- 小於0,例如:-2,代表從尾端開始刪除2個吻合的元素。
- 等於0,代表刪除所有吻合的元素。
刪除元素之後的結果:
最後,「保留」指定範圍元素的指令是LTRIM(”trim”代表「修剪」),底下兩道敘述將新增資料,接著修剪資料:
執行之後,she串列剩下“小雅”和“小萱”兩個元素: