# Data Type

### 資料簡介

本章節簡單介紹Redis提供主要五種資料結構，其中包含**STRING**(字符串)、**LIST**(串列/列表)、**HASH**(散列)、**SET**(集合)、**ZSET**(有序集合)。除了上述五種主要的資料結構，可再延伸出HyperLogLog、Bitmaps、Geospatial Indexes等其他資料形式，本教學暫時不提。

![](https://224613336-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-Mb64kSCne8LKJiDOD49%2F-MfD5eiegygCTkm7rIXP%2F-MfD6A73dlfxxhKJzIcm%2Fredis%20data%20structure%20example.png?alt=media\&token=2c2470d5-8c9c-4a2a-b272-81125b79c00c)

Redis所有資料型態皆為一個**Key**名稱對應一個結構儲存值**Value**，並在**Value**的部分區分成五種不同的資料結構，不僅結構中的儲存值形式不同，且對應的讀寫能力也不同，讀者應視不同的資料格式與不同的讀寫情境，採用適合的資料結構。

下表整理了主要的五種資料結構下，其基本的結構儲存值與讀寫能力，關於每個資料結構所對應的語法，可進一步參考**COMMAND**章節。

| 資料結構                                                                                                                                                                   | 結構儲存值                                                  | 讀寫能力                                                                          |
| ---------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------ | ----------------------------------------------------------------------------- |
| <p><a href="https://aiii-mike.gitbook.io/redis/command/string"><strong>STRING</strong><br>(字符串)</a></p>                                                                | 字符串、整數、浮點數                                             | <p>對整個字符串或其中一部分進行操作；</p><p>對整數或浮點數進行自(increament)或自減(decrement)操作</p>         |
| <p><a href="https://aiii-mike.gitbook.io/redis/command/hash"><strong>HASH</strong><br>(散列/雜湊)</a></p>                                                                  | 包含**鍵值對**的無序散列表                                        | 添加、獲取、移除單個鍵值對；                                                                |
| <p><a href="https://aiii-mike.gitbook.io/redis/command/list"><strong>LIST</strong></a></p><p><a href="https://aiii-mike.gitbook.io/redis/command/list">(串列/列表)</a></p> | 鏈結串列(Linked List)，每個節點包含了一個字符串，不同節點的字符串內容可重複。          | <p>從鏈表兩端推入或彈出元素；</p><p>根據偏移量進行修剪(trim)；</p><p>讀取單個或多個元素；</p><p>根據值查找或移除元素</p> |
| <p><a href="https://aiii-mike.gitbook.io/redis/command/set"><strong>SET</strong></a></p><p><a href="https://aiii-mike.gitbook.io/redis/command/set">(集合)</a></p>       | 包含字符串的無序收集器(unordered collection)，包含的每個字符串都是獨一無二且不重複的。 | <p>添加、獲取、移除單個元素；</p><p>檢查元素是否存在集合中；</p><p>計算交集、並集、差集；</p><p>從集合中隨機獲取元素</p>    |
| <p><a href="https://aiii-mike.gitbook.io/redis/command/zset"><strong>ZSET</strong></a></p><p><a href="https://aiii-mike.gitbook.io/redis/command/zset">(有序集合)</a></p>  | 字符串成員(member)與浮點數分數(score)之間的有序映射，元素的排列順序由分數的大小決定      | <p>添加、獲取、移除單個元素；</p><p>根據分值範圍(range)或成員來或去元素</p>                              |

